我想要一个可以阻止符号的正则表达式,只允许使用字母和数字。这个正则表达式效果很好但它不允许单词之间的空格。
^[a-zA-Z0-9_]*$
例如,使用此正则表达式时“HelloWorld”很好,但“Hello World”不匹配。
如何调整它以允许空格?
答案 0 :(得分:275)
只需在character class中添加空格。
^[a-zA-Z0-9_ ]*$
以上不完全正确。由于*
表示零或更多这一事实,它将匹配以下通常不会匹配的所有情况:
最初我并不认为这些细节值得进入,因为OP提出这样一个基本问题,认为严格并不是一个问题。既然问题已经获得了一些人气,我想说...
其中,我的风格(不使用\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}}。在较旧或更基本的语言和实用程序中,如\\s
,sed
和\w
未定义,因此请使用字符类将其写出来,例如 {{分别为1}}和\s
。
* 我知道这个问题被标记为vb.net,但基于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+)*$
只允许单词之间有一个空格,没有前导或尾随空格。
以下是正则表达式的解释:
^
在字符串开头处断言位置\w+
匹配任何字词[a-zA-Z0-9_]
+
在一次和无限次之间,尽可能多次,根据需要回馈[贪心] (\s\w+)*
*
在零和无限次之间,尽可能多次,根据需要回馈[贪婪] \s
匹配任何空格字符[\r\n\t\f ]
\w+
匹配任何字词[a-zA-Z0-9_]
+
在一次和无限次之间,尽可能多次,根据需要回馈[贪心] $
断言字符串末尾的位置答案 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)
试试。*?允许它为我工作的空白