我尝试使用这种模式
^[A-z]*[A-z,-, ]*[A-z]*
匹配以多个字母字符(a-z)开头,后跟多个连字符或空格,以字母字符结尾的字符串,例如:
Azasdas- - sa-as
但它不起作用。
答案 0 :(得分:1)
您不希望逗号在字符范围内也需要指定[A-Za-z\- ]
,因为A-Z和a-z的ASCII不是连续的。你错过了一些允许的空格,而你的最后一个表达需要考虑到这个问题。
你需要更接近这一点:
^([A-Za-z]*)-\s*([A-Za-z][A-Za-z -]*)([A-Za-z-]*)$
取决于您实际想要如何分解。如果不知道“块”背后的背景,它可能会或者可能不会更容易在连字符上分开。
修改的
实际上,更像是:
^([A-Za-z]*)([- ]*)([A-Za-z-]*)$
这是一个单词,后跟任意空格和连字符,后跟一个可能包含连字符的单词。
答案 1 :(得分:1)
请勿使用','(逗号)
^[A-z]*[A-z- ]*[A-z]*
答案 2 :(得分:1)
尝试^[A-Za-z][A-Za-z -]*[A-Za-z]$
^
表示该单词应以字母(A-Z或a-z)开头,然后是任意数量的字母或连字符。然后以$
表示的字母结尾。
此外,您不应该使用A-z,因为这将包含ASCII范围91到96中的非预期字符。请参阅table
答案 3 :(得分:1)
当前接受的答案(^[A-Za-z][A-Za-z-]*[A-Za-z]$
)仅匹配至少两个字符长的字符串 - 例如,它将匹配字符串"AB"
,但不仅仅是"A"
或"B"
。与此正则表达式相比:
^[A-Za-z]+([ -]+[A-Za-z]+)*$
通过将[ -]+
和第二个[A-Za-z]+
分组在一起,我说,如果有任何空格和/或连字符,则必须跟随更多字母。组上的*
量词使其成为可选项,因此"A"
将匹配,同时仍满足字符串以字母开头和结束的要求。