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

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

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

我如何调整它允许空格?


当前回答

这个正则表达式只允许字母和空格:

^[a-zA-Z ]*$

其他回答

博士tl;

只需要在你的角色类别中添加一个空格。

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

 


现在,如果你想严格一点…

以上说法并不完全正确。由于*意味着0或更多,它将匹配以下所有通常不打算匹配的情况:

空字符串""。 完全由空格“”组成的字符串。 以空格开头和/或结尾的字符串," Hello World "。 单词之间包含多个空格的字符串,“Hello World”。

起初我认为这些细节不值得讨论,因为OP问的是一个如此基本的问题,以至于严格似乎不是一个问题。现在这个问题已经很流行了,我想说……

...请使用@stema的答案。

在我看来(不用\w),它的意思是:

^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$

(无论如何,请给@stema投票。)

关于这个(和@stema的)答案,有几点需要注意:

如果你想允许单词之间有多个空格(比如,如果你想允许意外的双空格,或者如果你从PDF中复制粘贴文本),那么在空格后添加一个+: ^ \ w + (+ \ w +) *美元 如果你想允许制表符和换行符(空白字符),那么用\s+替换空格: ^ \ w + (\ s + \ w +) *美元 这里我建议在默认情况下使用+,因为,例如,Windows换行符由两个空格字符组成,分别是\r\n,所以您需要使用+来捕获这两个字符。

还是不行?

检查您使用的正则表达式的方言。*在Java等语言中,你必须转义反斜杠,即\\w和\\s。在更老的或更基本的语言和实用程序中,如sed, \w和\s是没有定义的,所以用字符类分别写出来,例如[a-zA-Z0-9_]和[\f\n\p\r\t]。

 


*我知道这个问题的标签是vb.net,但根据25000 +的阅读量,我猜不仅仅是那些人遇到了这个问题。目前,它是谷歌上搜索短语正则表达式空间词的第一个热点。

如果你正在使用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。

试一试:

^(\w+ ?)*$

解释:

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

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

\w+.*$

我假设您不需要前导/尾随空格。这意味着你必须把正则表达式分成“第一个字符”,“中间的东西”和“最后一个字符”:

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

或者如果你使用类似perl的语法:

^\w[\w ]*\w$

另外:如果你故意措辞你的正则表达式,它也允许空字符串,你必须使整个事情可选:

^(\w[\w ]*\w)?$

如果你想只允许单个空格字符,它看起来有点不同:

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

这个匹配0..N个单词后面跟着一个空格,加上一个没有空格的单词。并使整个东西可选,允许空字符串。