我正在尝试匹配一个包含字母数字、连字符、下划线和空格的字符串。连字符、下划线、空格和数字是可选的,但第一个和最后一个字符必须是字母。例如,这些都应该匹配:
abc abc def abc123 ab_cd ab-cd
字符串我试过这个:
^[a-zA-Z0-9-_ ]+$
型但它与空格、下划线或连字符在开始/结束时匹配,但它应该只允许在中间。
vmpqdwk31#
使用一个用字母字符 Package 的简单字符类:
^[a-zA-Z]([\w -]*[a-zA-Z])?$
字符串这匹配以字母开始和结束的输入,包括仅一个字母。你的正则表达式中有一个bug:字符中间有连字符,这使它成为一个字符范围。即[9-_]表示“9和_之间的每个字符(包括端点)”。如果你想要一个字符类中的文字破折号,把它放在第一个或最后一个或转义它。此外,更喜欢使用\w“单词字符”,这是所有的字母和数字和下划线优先于[a-zA-Z0-9_]-它更容易打字和阅读。
[9-_]
9
_
\w
[a-zA-Z0-9_]
68de4m5k2#
我尝试使用以下正则表达式:
/^\w+([\s-_]\w+)*$/
字符串这允许字母数字、下划线、空格和破折号。More details
ax6ht2ek3#
你可以使用这个正则表达式:
^[a-zA-Z0-9]+(?:[\w -]*[a-zA-Z0-9]+)*$
字符串RegEx Demo这将只允许字母数字在开始和结束。
wljmcqd84#
根据您的要求,包括空格,连字符,下划线和字母数字字符,您可以使用\w速记字符集为[a-zA-Z0-9_]。使用\-转义连字符,因为它通常用于字符集内的字符范围。为了消除开头和结尾的空格和连字符,我使用了[^\s\-]。所以完整的正则表达式变成了[^\s\-][\w \-]+[^\s\-]Here是工作演示。
\-
[^\s\-]
[^\s\-][\w \-]+[^\s\-]
4条答案
按热度按时间vmpqdwk31#
使用一个用字母字符 Package 的简单字符类:
字符串
这匹配以字母开始和结束的输入,包括仅一个字母。
你的正则表达式中有一个bug:字符中间有连字符,这使它成为一个字符范围。即
[9-_]
表示“9
和_
之间的每个字符(包括端点)”。如果你想要一个字符类中的文字破折号,把它放在第一个或最后一个或转义它。
此外,更喜欢使用
\w
“单词字符”,这是所有的字母和数字和下划线优先于[a-zA-Z0-9_]
-它更容易打字和阅读。68de4m5k2#
我尝试使用以下正则表达式:
字符串
这允许字母数字、下划线、空格和破折号。More details
ax6ht2ek3#
你可以使用这个正则表达式:
字符串
RegEx Demo
这将只允许字母数字在开始和结束。
wljmcqd84#
根据您的要求,包括空格,连字符,下划线和字母数字字符,您可以使用
\w
速记字符集为[a-zA-Z0-9_]
。使用\-
转义连字符,因为它通常用于字符集内的字符范围。为了消除开头和结尾的空格和连字符,我使用了
[^\s\-]
。所以完整的正则表达式变成了
[^\s\-][\w \-]+[^\s\-]
Here是工作演示。