我需要一个正则表达式,它匹配以字母开头和结尾的字符串,并且在它之间包含4-8个字符:A-z
,-
,_
和{{ 1}}
字符串不得包含两个或多个连续的.
,-
或.
个字符。
没有连续限制的正则表达式_
如何在此处添加限制或者可能不可能?
我知道在正则表达式中否定特定单词的首选方法是否定前瞻,但我不知道如何在此处实现它。
答案 0 :(得分:10)
您可以预先使用负向预测来检查该角色类中是否没有任何连续字符。试试这个正则表达式:
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
答案 1 :(得分:1)
使用单独的正则表达式来验证字符串不包含连续字符会更容易:
if(!str.match(/--|\.\.|__/)) {
// passed the test
}
(这是JavaScript语法,翻译成您选择的语言!)