gpt4 book ai didi

java - 如何通过电子邮件通过撇号进行验证并使用正则表达式限制 @ 符号后的点数。 (JAVA)

转载 作者:行者123 更新时间:2023-12-01 10:52:08 25 4
gpt4 key购买 nike

有人可以帮我吗?我对正则表达式不太熟悉,我正在尝试验证电子邮件地址。我的正则表达式和代码是:

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());
}

}

}

这个正则表达式工作正常,但在带有撇号的电子邮件上失败。另一个问题是 @ 符号后面只允许有 3 个点是理想的。如有任何建议,我们将不胜感激。

问候

最佳答案

This regEx works fine but fails on emails with apostrophes.

Followed @Am_I_Helpful comment and found a good solution. "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[‌​a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"

确切地说,您需要包含 character class 中所有允许的字符。 :

[a-z0-9!#$%&'*+/=?^_`{|}~-]+
\_________________/
non-alphanumerics allowed

我还将您的模式锚定到字符串的开头和结尾 ^$就像您在之前的版本中一样。

<小时/>

The other issue is that it would be ideal to allow only 3 dots after the @ symbol.

这个non-capturing group正则表达式中的 @ 之后的每个点都会重复一次:

@(?:[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

但是您正在使用+ quantifier至少重复一次,但可以匹配多次。相反,使用 {1,3} 来限制重复。 quantifier .

@(?:[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])?$"

regex101 demo

关于java - 如何通过电子邮件通过撇号进行验证并使用正则表达式限制 @ 符号后的点数。 (JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33805483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com