正则表达式,允许单词之间的空格

时间:2013-03-18 08:52:53

标签: regex space alphanumeric

我想要一个可以阻止符号的正则表达式,只允许使用字母和数字。这个正则表达式效果很好但它不允许单词之间的空格。

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

例如,使用此正则表达式时“HelloWorld”很好,但“Hello World”不匹配。

如何调整它以允许空格?

18 个答案:

答案 0 :(得分:275)

TL;博士

只需在character class中添加空格。

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


现在,如果你想要严格......

以上不完全正确。由于*表示零或更多这一事实,它将匹配以下通常不会匹配的所有情况:

  • 空字符串,“”。
  • 一个完全由空格组成的字符串,“”。
  • 用空格引导和/或跟踪的字符串,“Hello World”。
  • 字符串之间包含多个空格的字符串,“Hello World”。

最初我并不认为这些细节值得进入,因为OP提出这样一个基本问题,认为严格并不是一个问题。既然问题已经获得了一些人气,我想说...

...使用@stema's answer

其中,我的风格(不使用\w)转换为:

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

(请注意@stema无论如何。)

关于这个(和@ stema的)答案有些注意事项:

  • 如果你想在单词之间允许多个空格(比方说,如果你想允许意外的双重空格,或者你正在使用来自a的复制粘贴文本) PDF),然后在空格后添加+

    ^\w+( +\w+)*$
    
  • 如果要允许标签和换行符(空格字符),请用\s+替换空格:

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

    默认情况下,我建议使用+,例如,Windows换行符按顺序包含两个空格字符\r\n,因此您需要+ 1}}要抓住两者。

还没有用?

检查你正在使用的正则表达式的方言。 * 在像Java这样的语言中,你必须逃避反斜杠, ie \\w和{ {1}}。在较旧或更基本的语言和实用程序中,如\\ssed\w未定义,因此请使用字符类将其写出来,例如 {{分别为1}}和\s


* 我知道这个问题被标记为,但基于25,000多个观点,我猜这不仅仅是那些遇到这个问题的人。目前,它是谷歌搜索词组的第一个热门词,正则表达式空格词

答案 1 :(得分:97)

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

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

我将使用\w这与大多数正则表达式相同而不是[a-zA-Z0-9_](有些基于Unicode)

^\w+( \w+)*$

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

^匹配字符串的开头

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

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

$匹配字符串

的结尾

答案 2 :(得分:21)

这个对我有用

([\w ]+)

答案 3 :(得分:10)

尝试:

^(\w+ ?)*$

说明:

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

答案 4 :(得分:4)

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

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

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

^\w[\w ]*\w$

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

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

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

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

这匹配0..n单词后跟单个空格,加上一个没有空格的单词。并使整个事物可选,以允许空字符串。

答案 5 :(得分:2)

仅限字母:

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

对于字母数字值和_

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

答案 6 :(得分:2)

这个正则表达式

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

只允许单词之间有一个空格,没有前导或尾随空格。

以下是正则表达式的解释:

  1. ^在字符串开头处断言位置
  2. \w+匹配任何字词[a-zA-Z0-9_]
    1. 量词:+在一次和无限次之间,尽可能多次,根据需要回馈[贪心]
  3. 第一个捕获小组(\s\w+)*
    1. 量词:*在零和无限次之间,尽可能多次,根据需要回馈[贪婪]
    2. \s匹配任何空格字符[\r\n\t\f ]
    3. \w+匹配任何字词[a-zA-Z0-9_]
      1. 量词:+在一次和无限次之间,尽可能多次,根据需要回馈[贪心]
  4. $断言字符串末尾的位置

答案 7 :(得分:2)

这不允许开头的空间。但允许在单词之间留出空格。还允许单词之间的特殊字符。 FirstName和LastName字段的正确的正则表达式。

\w+.*$

答案 8 :(得分:0)

试试这个:( Python版)

"(A-Za-z0-9 ){2, 25}"

根据您的数据集更改上限

答案 9 :(得分:0)

这是我的正则表达式:@"^(?=.{3,15}$)(?:(?:\p{L}|\p{N})[._()\[\]-]?)*$"

我刚刚在([\w ]+)之前的正则表达式末尾添加了*

@"^(?=.{3,15}$)(?:(?:\p{L}|\p{N})[._()\[\]-]?)([\w ]+)*$"

现在字符串中可以有空格。

答案 10 :(得分:0)

尝试这个:

result = re.search(r"\w+( )\w+", text)

答案 11 :(得分:0)

如果你使用的是 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

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

答案 12 :(得分:-1)

好好看看这些假设的答案......

...和bupkis在搜索Stack Overflow之后以及其他网站的正则表达式匹配任何字符串,没有开始或尾随的空白区域,只有一个空格在严格的字母字符之间。

^[a-zA-Z]+[(?<=\d\s]([a-zA-Z]+\s)*[a-zA-Z]+$

因此很容易修改为字母数字:

^[a-zA-Z0-9]+[(?<=\d\s]([a-zA-Z0-9]+\s)*[a-zA-Z0-9]+$

(这与单个单词不匹配,但如果您需要另外捕获单个单词,只需使用带有简单^[a-zA-Z0-9]+$的开关/ if-else。)

享受:D

答案 13 :(得分:-1)

我发现这个适用于“FullName”:

([a-z',.-]+( [a-z',.-]+)*){1,70}/

答案 14 :(得分:-1)

当用户包含键盘字符时,以上所有代码均无效。所以这里是regx,当允许用户添加任何字符或单词但他们可以在单词之间放置空格。试试这个。

 ^[^ ]+( [^ ]+)*$

答案 15 :(得分:-1)

只需在正则表达式模式的末尾添加一个空格,如下所示:

[a-zA-Z0-9_ ]

答案 16 :(得分:-1)

如果空格是可选的,则可以匹配:

string1 = 'hello_World'

string2 = 'hello world'

通过

pattern = '[\w\s]+'

答案 17 :(得分:-4)

试试。*?允许它为我工作的空白