regex 匹配字母数字、连字符、下划线和空格字符串的正则表达式

fsi0uk1n  于 2023-08-08  发布在  其他
关注(0)|答案(4)|浏览(115)

我正在尝试匹配一个包含字母数字、连字符、下划线和空格的字符串。
连字符、下划线、空格和数字是可选的,但第一个和最后一个字符必须是字母。
例如,这些都应该匹配:

abc
abc def
abc123
ab_cd
ab-cd

字符串
我试过这个:

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


但它与空格、下划线或连字符在开始/结束时匹配,但它应该只允许在中间。

vmpqdwk3

vmpqdwk31#

使用一个用字母字符 Package 的简单字符类:

^[a-zA-Z]([\w -]*[a-zA-Z])?$

字符串
这匹配以字母开始和结束的输入,包括仅一个字母。
你的正则表达式中有一个bug:字符中间有连字符,这使它成为一个字符范围。即[9-_]表示“9_之间的每个字符(包括端点)”。
如果你想要一个字符类中的文字破折号,把它放在第一个或最后一个或转义它。
此外,更喜欢使用\w“单词字符”,这是所有的字母和数字和下划线优先于[a-zA-Z0-9_]-它更容易打字和阅读。

68de4m5k

68de4m5k2#

我尝试使用以下正则表达式:

/^\w+([\s-_]\w+)*$/

字符串
这允许字母数字、下划线、空格和破折号。More details

ax6ht2ek

ax6ht2ek3#

你可以使用这个正则表达式:

^[a-zA-Z0-9]+(?:[\w -]*[a-zA-Z0-9]+)*$

字符串
RegEx Demo
这将只允许字母数字在开始和结束。

wljmcqd8

wljmcqd84#

根据您的要求,包括空格,连字符,下划线和字母数字字符,您可以使用\w速记字符集为[a-zA-Z0-9_]。使用\-转义连字符,因为它通常用于字符集内的字符范围。
为了消除开头和结尾的空格和连字符,我使用了[^\s\-]
所以完整的正则表达式变成了[^\s\-][\w \-]+[^\s\-]
Here是工作演示。

相关问题