正则表达式验证字符串

时间:2011-10-23 16:03:44

标签: java regex

我尝试使用这种模式

^[A-z]*[A-z,-, ]*[A-z]* 

匹配以多个字母字符(a-z)开头,后跟多个连字符或空格,以字母字符结尾的字符串,例如:

Azasdas- - sa-as

但它不起作用。

4 个答案:

答案 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"将匹配,同时仍满足字符串以字母开头和结束的要求。