我需要一个正则表达式,它匹配一个以字母开头和结尾的字符串,其中包含 4-8 个字符:A-z
、-
、_
和.
字符串不得包含两个或多个连续-
的 、.
或_
字符。
没有连续限制的正则表达式是^[A-z][A-z_\\.\\-]{4,8}[A-z]$
如何在此处添加限制或者不可能?
我知道在正则表达式中对特定单词进行否定的首选方法是负前瞻,但我不知道如何在这里实现它。
您可以预先使用否定前瞻来检查该字符类中没有任何连续字符。试试这个正则表达式:
str.matches("(?!.*([._-])\\1)[A-Za-z][a-zA-Z._-]{4,8}[a-zA-Z]");
解释:
(?! // Start negative look-ahead (not followed by)
.* // Any string
( // Start capture group 1
[._-] // Any of ., _, -
)
\\1 // \1 (escaped \\1) Same character captured in capture group 1 (avoid consecutive)
) // Look-ahead ends
[A-Za-z] // Alphabets
[a-zA-Z._-] // Any of alphabets, ., -, _
{4,8} // repeated 4 to 8 times
[a-zA-Z] // ends with alphabet
使用单独的正则表达式来验证字符串不包含连续字符会更容易:
if(!str.match(/--|\.\.|__/)) {
// passed the test
}
(这是 JavaScript 语法,翻译成您选择的语言!)