我正在尝试匹配包含字母数字,连字符,下划线和空格的字符串。
连字符,下划线,空格和数字是可选的,但第一个和最后一个字符必须是字母。
例如,这些都应该匹配:
abc
abc def
abc123
ab_cd
ab-cd
我试过了:
^[a-zA-Z0-9-_ ]+$
但它在开始/结束时与空格,下划线或连字符匹配,但它只允许介于两者之间。
答案 0 :(得分:5)
使用包含字母字符的简单字符类:
^[a-zA-Z]([\w -]*[a-zA-Z])?$
这匹配以字母开头和结尾的输入,包括一个字母。
你的正则表达式中有一个错误:你的角色中间有一个连字符,这使得它成为一个字符范围。即[9-_]
表示" 9
和_
之间的每个字符。
如果你想在字符类中使用文字短划线,请将其放在第一位或最后一位或将其转义。
此外,更喜欢使用\w
"字符",这是所有字母和数字,而下划线优先于[a-zA-Z0-9_]
- 更容易输入并阅读。
答案 1 :(得分:1)
请在小提琴http://refiddle.com/refiddles/56a07cec75622d3ff7c10000
中查看此内容这将解决问题
^[a-zA-Z]+[a-zA-Z0-9-_ ]*[a-zA-Z0-9]$
答案 2 :(得分:0)
答案 3 :(得分:0)
根据您要求包含空格,连字符,下划线和字母数字字符的要求,您可以使用\w
[a-zA-Z0-9_]
的速记字符集。使用\-
转义连字符,因为它通常用于字符集内的字符范围。
要在开头和结尾否定空格和连字符,我使用了[^\s\-]
。
完整的正则表达式变为[^\s\-][\w \-]+[^\s\-]
Here是工作演示。
答案 4 :(得分:0)