正则表达式允许单词之间有空格。

34 浏览
0 Comments

正则表达式允许单词之间有空格。

我需要一个可以防止出现符号,只允许字母和数字的正则表达式。下面的正则表达式非常好用,但是它不允许单词之间有空格。

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

例如,当使用这个正则表达式时,\"HelloWorld\" 没问题,但是 \"Hello World\" 不匹配。

如何修改它以允许空格?

admin 更改状态以发布 2023年5月24日
0
0 Comments

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

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

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

^\w+( \w+)*$

这将允许至少一个单词系列,并且这些单词由空格分隔。

^匹配字符串的开头

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

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

$匹配字符串的结尾

0
0 Comments

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],分别。

 


* 我知道这个问题被标记为,但是根据25,000多次浏览,我猜这不仅仅是那些人遇到这个问题。目前它是谷歌搜索短语" regular expression space word "的首个搜索结果。

0