law*_*tog 164 regex space alphanumeric
我想要一个正则表达式来阻止符号,只允许字母和数字.这个正则表达式工作得很好但它不允许单词之间的空格.
^[a-zA-Z0-9_]*$
Run Code Online (Sandbox Code Playgroud)
例如,使用此正则表达式时"HelloWorld"很好,但"Hello World"不匹配.
如何调整它以允许空格?
And*_*ong 312
只需在角色类中添加一个空格即可.
^[a-zA-Z0-9_ ]*$
Run Code Online (Sandbox Code Playgroud)
以上不完全正确.由于这*意味着零或更多,它将匹配以下通常不会匹配的所有情况:
最初我并不认为这些细节值得进入,因为OP提出这样一个基本问题,看起来严格并不是一个问题.既然问题已经获得了一些人气,我想说...
其中,在我的口味(不使用\w)转换为:
^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$
Run Code Online (Sandbox Code Playgroud)
(无论如何,请upvote @stema.)
关于这个(和@ stema的)答案有些注意事项:
如果你想允许多个空格字之间(比方说,如果你想允许偶然的双空格,或者如果你有从PDF复制粘贴的文本工作),然后添加一个+空格之后:
^\w+( +\w+)*$
Run Code Online (Sandbox Code Playgroud)如果要允许制表符和换行符(空格字符),则用以下内容替换空格\s+:
^\w+(\s+\w+)*$
Run Code Online (Sandbox Code Playgroud)
+默认情况下,我建议使用,例如,Windows换行符按顺序包含两个空白字符\r\n,因此您需要+同时捕获这两个字符.
检查您正在使用的正则表达式的方言.*在像Java这样的语言中,你必须逃避你的反斜杠,即 \\w和\\s.在较旧的或更基本的语言和实用程序中,例如sed,\w并且\s未定义,因此请分别使用字符类(例如 [a-zA-Z0-9_]和)来写出它们[\f\n\p\r\t].
*我知道这个问题被标记为vb.net,但基于25,000多个观点,我猜这不仅仅是那些遇到这个问题的人.目前它是谷歌搜索词组,正则表达空间词的第一个热门.
ste*_*ema 106
一种可能性就是将空间添加到您的字符类中,如acheong87建议,这取决于您对模式的严格程度,因为这也允许以5个空格开头的字符串或仅包含空格的字符串.
另一种可能性是定义一种模式:
我将使用\w它在大多数正则表达式的风格相同[a-zA-Z0-9_](在某些它是基于Unicode的)
^\w+( \w+)*$
Run Code Online (Sandbox Code Playgroud)
这将允许一系列至少一个单词,并且单词被空格分隔.
^ 匹配字符串的开头
\w+ 匹配一系列至少一个单词字符
( \w+)*是重复0次或更多次的组.在该组中,它期望一个空格,后跟一系列至少一个单词字符
$ 匹配字符串的结尾
hsz*_*hsz 10
试试:
^(\w+ ?)*$
Run Code Online (Sandbox Code Playgroud)
说明:
\w - alias for [a-zA-Z_0-9]
"whitespace"? - allow whitespace after word, set is as optional
Run Code Online (Sandbox Code Playgroud)
我假设您不想要前导/尾随空间。这意味着您必须将正则表达式拆分为“第一个字符”、“中间的内容”和“最后一个字符”:
^[a-zA-Z0-9_][a-zA-Z0-9_ ]*[a-zA-Z0-9_]$
Run Code Online (Sandbox Code Playgroud)
或者如果您使用类似 perl 的语法:
^\w[\w ]*\w$
Run Code Online (Sandbox Code Playgroud)
另外:如果您故意将正则表达式表述为也允许空字符串,则必须将整个内容设为可选:
^(\w[\w ]*\w)?$
Run Code Online (Sandbox Code Playgroud)
如果你只想允许单个空格字符,它看起来有点不同:
^((\w+ )*\w+)?$
Run Code Online (Sandbox Code Playgroud)
这匹配 0..n 个单词后跟一个空格,再加上一个没有空格的单词。并使整个事物可选以允许空字符串。
这个正则表达式
^\w+(\s\w+)*$
Run Code Online (Sandbox Code Playgroud)
将只允许单词之间有一个空格,并且没有前导或尾随空格。
下面是正则表达式的解释:
^ 断言字符串开头的位置\w+ 匹配任何单词字符 [a-zA-Z0-9_]
+一次和无限次之间,尽可能多次,按需回馈[贪婪](\s\w+)*
*在零次和无限次之间,尽可能多次,按需回馈[贪婪]\s 匹配任何空白字符 [\r\n\t\f ]\w+ 匹配任何单词字符 [a-zA-Z0-9_]+一次和无限次之间,尽可能多次,按需回馈[贪婪]$ 断言字符串末尾的位置