我需要在Java中验证字符串以满足以下要求:
这个正则表达式是否是正确的解决方案?
^(?!([^\\.]*+\\.){2,})[\\.a-z0-9_-]{5,32}$
答案 0 :(得分:1)
您非常接近,您可以使用此正则表达式来阻止输入中的2个句点:
^(?!([^.]*\\.){2})[.a-z0-9_-]{5,32}$
如果要阻止2个连续点,请使用:
^(?!.*?\\.{2})[.a-z0-9_-]{5,32}$
答案 1 :(得分:1)
我喜欢正则表达式,但出于可读性和可维护性的原因,我认为应尽可能保持简单,这意味着将它们用于他们擅长的事情,并在适当的时候使用您的语言/环境的其他功能
在评论中,您说这是用于bean验证。您可以使用多个简单注释验证您的字段:
@Size(min=5,max=32)
@Pattern.List({
@Pattern(regexp = "^[a-z0-9-_.]*$",
message = "Valid characters are a-z, 0-9, -, _, ."),
@Pattern(regexp = "^((?!\.{2}).)*$",
message = "Must not contain a double period")
})
private String myField;
还要记住,您可以用Java编写自定义约束。
......当然在其他情况下同样适用:
boolean isValid(String s) {
return s.length() >= 5 &&
s.length() <= 32 &&
s.matches("^[a-z0-9-_.]*$") &&
!s.contains("..")
}
答案 2 :(得分:0)
这可能有效
# "^(?:[0-9a-z_-]|\\.(?!\\.)){5,32}$"
^
(?:
[0-9a-z_-]
| \.
(?! \. )
){5,32}
$