Java正则表达式-字母数字,最多一个连字符、句点或下划线,七个字符长
我不熟悉Java中的正则表达式工具,尽管它们潜力巨大,但我很难完成这项任务。我想编写一个正则表达式来验证输入字符串,该字符串遵循以下语法:Java正则表达式-字母数字,最多一个连字符、句点或下划线,七个字符长,java,regex,Java,Regex,我不熟悉Java中的正则表达式工具,尽管它们潜力巨大,但我很难完成这项任务。我想编写一个正则表达式来验证输入字符串,该字符串遵循以下语法: 小写字母和数字的任意组合 只有一个下划线、一个破折号或一个句点(没有其他特殊字符) 最小长度为5 我提出了以下解决方案: ([/./-{0,1}[a-z0-9]){5,} 但是,在某些情况下,它仍然不起作用,例如,它不匹配一个字符串,其中允许的一个特殊字符在中间(例如HLLO)。我哪里出错了?就我而言,还有比这更好的款式吗?这个怎么样?您可以使用“向前看”来
但是,在某些情况下,它仍然不起作用,例如,它不匹配一个字符串,其中允许的一个特殊字符在中间(例如HLLO)。我哪里出错了?就我而言,还有比这更好的款式吗?
这个怎么样?您可以使用“向前看”来验证至少有5个字符^(?=.{5})[a-z0-9]*([-_.][a-z0-9]*)?$
不要用正则表达式。由于事物可以以任何顺序出现,因此在没有以下情况下更容易:
if (str.length() < 5) {
return false;
}
int specialCharacterCount = 0;
for (int i = 0; i < str.length(); ++i) {
char c = str.charAt(i);
if (Character.isLowerCase(c)) {
// A lowercase letter.
} else if (Character.isDigit(c)) {
// A number.
} else if ("_.-".indexOf(c) >= 0) {
// An allowed special character.
++specialCharacterCount;
} else {
// Some other character - immediately invalid.
return false;
}
}
// Return true if there is at most one of _, . and -.
return specialCharacterCount <= 1;
if(str.length()<5){
返回false;
}
int specialCharacterCount=0;
对于(int i=0;i=0),则为else{
//允许的特殊字符。
++特殊字符计数;
}否则{
//其他字符-立即无效。
返回false;
}
}
//如果最多有一个,则返回true。及-。
return specialCharacterCount您可以在一个正则表达式中完成所有操作:
^ # start string
(?=[^-_.]*[-_.][^-_.]*$) # lookahead fulfilling condition 2
([-_.\w]{5,}) # all allowed characters at least 5
$ # end of string
请参阅并注意,在Java
中需要双反斜杠,以便表达式变成:
^(?=[^-_.]*[-_.][^-_.]*$)([-_.\\w]{5,})$
通常,它有助于显示您测试的代码,以防出现编码错误。另外,有些东西不能使用正则表达式,必须进行解析。大多数人更喜欢解析器,因为结果是更干净的。你将需要查找表。下划线,破折号或句号可以放在哪里(在开始,中间,在结尾)?它几乎是正确的。您需要用可选组包装[-.][a-z0-9]*
。另外,(?=.{5,})
可以替换为(?=.{5})
,这就足够了。没有看到可选要求。谢谢。正是我想要的,正则表达式所需的代码行要少得多。@Jan我将采用这样的代码,我可以在一周中的任何一天轻松调试。老笑话是,解决正则表达式问题的人会遇到两个问题。可维护的代码比“代码行”更重要;regex两者都没有。