正则表达式允许单词之间有空格。
正则表达式允许单词之间有空格。
我需要一个可以防止出现符号,只允许字母和数字的正则表达式。下面的正则表达式非常好用,但是它不允许单词之间有空格。
^[a-zA-Z0-9_]*$
例如,当使用这个正则表达式时,\"HelloWorld\" 没问题,但是 \"Hello World\" 不匹配。
如何修改它以允许空格?
admin 更改状态以发布 2023年5月24日
tl;dr
只需在字符类中添加一个空格即可。
^[a-zA-Z0-9_ ]*$
现在,如果你想很严格...
上述并不完全正确。由于*
表示零个或多个,它将匹配所有以下情况,但通常不是我们想匹配的:
- 空字符串 ""。
- 完全由空格组成的字符串 " "。
- 以空格开头和/或结尾的字符串 " 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,但是根据25,000多次浏览,我猜这不仅仅是那些人遇到这个问题。目前它是谷歌搜索短语" regular expression space word "的首个搜索结果。