我正在尝试匹配包含字母数字,连字符,下划线和空格的字符串.
连字符,下划线,空格和数字是可选的,但第一个和最后一个字符必须是字母.
例如,这些都应该匹配:
abc
abc def
abc123
ab_cd
ab-cd
Run Code Online (Sandbox Code Playgroud)
我试过这个:
^[a-zA-Z0-9-_ ]+$
Run Code Online (Sandbox Code Playgroud)
但它在开始/结束时与空格,下划线或连字符匹配,但它只允许介于两者之间.
使用包含字母字符的简单字符类:
^[a-zA-Z]([\w -]*[a-zA-Z])?$
Run Code Online (Sandbox Code Playgroud)
这匹配以字母开头和结尾的输入,包括一个字母.
你的正则表达式中有一个错误:你的角色中间有连字符,这使得它成为一个字符范围.即[9-_]意味着"之间的每一个字符9和_包容性.
如果您想在字符类中使用文字短划线,请将其放在第一位或最后一位或将其转义.
此外,更喜欢使用\w"单词字符",这是所有字母和数字以及优先顺序的下划线[a-zA-Z0-9_]- 它更容易键入和读取.