正则表达式验证仅包含字母 A-Z、a-z、数字 0-9、空格、句点、连字符、感叹号!、问号?和引号"。

5

我希望使用正则表达式来验证用户输入的文本。

/^[a-zA-Z0-9 ]+$/

通过上述代码,我们只允许输入字母、数字和空格。

以下是可以允许的正则表达式:

字母,
数字,
空格,
句点 .,
连字符 -,
感叹号 !,
问号 ?,
引号 "

除了上面提到的这些字符,用户不能输入其他字符。

谢谢, naveenos

4个回答

10

您已经接近成功了。尝试以下操作:

/^[a-zA-Z0-9 .!?"-]+$/

请注意,-字符的位置非常重要。如果它出现在两个字符之间(例如a-z),它表示一个字符范围。如果它出现在字符类的开头或结尾(或者被转义),则表示一个字面上的连字符。

我已经使用了这个表达式,但我认为我把符号放错了顺序。谢谢。 - naveenos
我发现一个问题,它仍然不允许在文本区域中输入回车键。链接 - naveenos
别担心,我懂了。以下语法将允许在文本区域中使用回车键,并进行所有验证: /^[a-zA-Z0-9\s .!?"-]+$/ - naveenos
@naveenos如果这样做,还可以允许制表符和其他空白字符。如果可以的话,你可以简化为/^[a-zA-Z0-9\s.!?"-]+$/。如果只想允许空格和换行符,可以使用/^[a-zA-Z0-9\n .!?"-]+$/(可能需要添加\r来表示回车符)。 - p.s.w.g
感谢您关于连字符符号的建议,帮助我解决了我的正则表达式为什么接受一系列符号的问题。我的错误正则表达式:[0-9a-zA-Z -_] - RokumDev

7

您只需在正则表达式的字符类中包含这些额外符号。

您可以使用以下正则表达式:

/^[a-zA-Z0-9 "!?.-]+$/

2
值得指出的是,当连字符作为方括号内的第一个或最后一个字符时,它失去了其特殊含义。 - Floris
这不是相反的吗?我的意思是,如果连字符不在第一个或最后一个位置,它就不是字面上的连字符,对吗? - anubhava
1
谢谢你的回答。我只想要字母和连字符,所以我使用了以下正则表达式,它非常有效: /^[a-zA-Z-]*$/ - Manish
1
不确定为什么,但这对我没起作用,也许是因为我在使用Javascript??无论如何,最终我发现我需要把^放在括号里面。像这样:return str.replace(/[^a-zA-Z0-9 "!?.-]+/g, '') - Simon Hutchison
在字符类的开头使用“^”可以对其进行否定。这样做有效是因为你是在替换而不是匹配中使用它。 - anubhava
显示剩余2条评论

0

尝试这个模式

<?php /^[a-zA-Z0-9 \s\.\!\?\"\-]+$/ ?>

0

在标记$MEB$后面加上花括号? 使用线条填充绘画 被动语态的反身代词用法 Kicad


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Maximilian Ballard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接