我想要一个正则表达式,防止符号,只允许字母和数字。下面的正则表达式工作得很好,但它不允许单词之间有空格。

^[a-zA-Z0-9_]*$

例如,当使用这个正则表达式时,“HelloWorld”是可以的,但“HelloWorld”不匹配。

我如何调整它允许空格?


当前回答

如果你正在使用JavaScript,那么你可以使用这个正则表达式:

/^[a-z0-9_.-\s]+$/i

例如:

/^[a-z0-9_.-\s]+$/i.test("") //false
/^[a-z0-9_.-\s]+$/i.test("helloworld") //true
/^[a-z0-9_.-\s]+$/i.test("hello world") //true
/^[a-z0-9_.-\s]+$/i.test("none alpha: ɹqɯ") //false

这个正则表达式的唯一缺点是字符串完全由空格组成。" "也会显示为true。

其他回答

一种可能是将空格添加到您的字符类中,就像acheong87建议的那样,这取决于您对模式的严格程度,因为这也将允许字符串以5个空格开头,或者仅由空格组成。

另一种可能是定义一个模式:

我将使用\w,这是在大多数正则表达式口味与[a-zA-Z0-9_]相同(在一些是基于Unicode的)

^\w+( \w+)*$

这将允许至少一个单词的序列,并且单词用空格分隔。

^匹配字符串的开头

\w+匹配至少一个单词字符的序列

(\w+)*是一个重复0次或更多次的组。在组中,它期望一个空格后面跟着至少一个单词字符的系列

$匹配字符串的结尾

只适用于字母:

^([a-zA-Z])+(\s)+[a-zA-Z]+$

对于字母数字值和_:

^(\w)+(\s)+\w+$

这个正则表达式

^\w+(\s\w+)*$

将只允许单词之间有一个空格,不允许开头或结尾空格。

正则表达式解释如下:

^ Assert position at start of the string \w+ Match any word character [a-zA-Z0-9_] Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] 1st Capturing group (\s\w+)* Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy] \s Match any white space character [\r\n\t\f ] \w+ Match any word character [a-zA-Z0-9_] Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] $ Assert position at end of the string

试一试:

^(\w+ ?)*$

解释:

\w             - alias for [a-zA-Z_0-9]
"whitespace"?  - allow whitespace after word, set is as optional

这在一开始就不允许有空间。但允许单词之间有空格。还允许在单词之间使用特殊字符。一个用于FirstName和LastName字段的良好正则表达式。

\w+.*$