![](/img/trans.png)
[英]Java regular expression. Alphabetic, with spaces and apostrophe (')
[英]How to email validate with apostrophe and limit the number of dots after the @ symbol using Regular expression. (JAVA)
有人能帮助我吗? 我对regEx不太熟悉,我正在尝试验证电子邮件地址。 我拥有的regEx和代码是:
public class TestRegExEmail {
public static void main(final String[] args) {
// List of valid URLs
List<String> validValues = new ArrayList<>();
validValues.add("wiliam@hotmail.com");
validValues.add("wiliam.ferraciolli@hotmail.com");
validValues.add("wiliam@hotmail.co.uk");
validValues.add("wiliam.ferraciolli@hotmail.co.uk");
validValues.add("wiliam_ferraciolli@hotmail.co.uk");
validValues.add("wiliam'ferraciolli@hotmail.co.uk");
validValues.add("wiliam334-1@mydomain.co.uk.me");
// List on invalid URLs
List<String> invalidValues = new ArrayList<>();
invalidValues.add("wiliam.ferraciolli@hotmail.com.dodge.too.many");
invalidValues.add("hwiliam@hotmail.com.otherdomain.uk.dodge");
invalidValues.add("wiliam.ferraciolli@hotmail.com.com.com.com");
invalidValues.add("wiliam.hotmail.com");
invalidValues.add("wiliam..ferraciolli@hotmail.com");
invalidValues.add("wiliam%ferraciolli.@hotmail.com");
invalidValues.add("wiliam$ferraciolli.@hotmail.com");
invalidValues.add("wiliam/ferraciolli.@hotmail.com");
// Pattern
String regex = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
Pattern pattern = Pattern.compile(regex);
// print valid emails
for (String s : validValues) {
Matcher matcher = pattern.matcher(s);
System.out.println(s + " // " + matcher.matches());
}
System.out.println();
// print invalid emails
for (String s : invalidValues) {
Matcher matcher = pattern.matcher(s);
System.out.println(s + " // " + matcher.matches());
}
}
}
此regEx可以正常工作,但在带有撇号的电子邮件上失败。 另一个问题是,在@符号后仅允许3个点是理想的。 任何建议,将不胜感激。
问候
此regEx可以正常工作,但在带有撇号的电子邮件上失败。
跟随@Am_I_Helpful评论,找到了一个好的解决方案。
"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"
[a-z0-9!#$%&'*+/=?^_`{|}~-]+
\_________________/
non-alphanumerics allowed
我也将您的模式锚定在他的字符串的开头和结尾,分别使用^
和$
就像您在先前版本中一样。
另一个问题是,在@符号后仅允许3个点是理想的。
对于@
之后的每个圆点,此正则表达式中的非捕获组重复一次:
@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
\ \_/ /
\ literal dots /
\______________________/
repeated once for each dot
但是,您正在使用+
量词重复至少一次,但要重复多次。 而是使用{1,3}
量词限制重复。
@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.){1,3}[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
^^^^^
正则表达式
"^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.){1,3}[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.