首页 > 解决方案 > java - 如何使用正则表达式防止Java电子邮件字段中的重音字符?

问题描述

我有一个表单中的电子邮件字段,该表单当前使用 GenericValidator.isEmail 方法进行了验证。但现在我需要应用另一个验证,以防止将重音字符发送到电子邮件地址。所以我正在考虑使用正则表达式模式匹配方法,我在 stackoverflow 本身中找到了一个

if (Pattern.matches(".*[éèàù].*", input)) {
  // your code
}

问题是我在模式中只看到 é è à ù 字符,但还有其他几个重音字符,如 õ ü ì 等。那么有没有一种方法可以为所有类型的重音字符匹配模式?我需要匹配 NL(荷兰语)、FR(法语)和 DE(德语)语言的重音字符。我需要检查我的电子邮件地址是否有任何重音字符以及它是否需要在那里停止执行并抛出错误

标签: javaregexvalidation

解决方案


事实证明,您想要匹配除 ASCII 字母之外的任何字母。

我建议从匹配任何 Unicode 字母的模式中减去ASCII 字母:\p{L}

Pattern.matches("(?s).*[\\p{L}&&[^A-Za-z]].*", input)

这里,

  • (?s)-Pattern.DOTALL嵌入标志选项,使跨行.匹配
  • .*- 任何零个或多个字符,尽可能多
  • [\\p{L}&&[^A-Za-z]]- 除 ASCII 字母外的任何 Unicode 字母
  • .*- 任何零个或多个字符,尽可能多。

请注意,最好使用它,find()因为它也返回部分匹配,并且不需要在上述模式中使用(?s).*and .*,这使得使用更长的字符串更有效:

Pattern.compile("[\\p{L}&&[^A-Za-z]]").matcher(input).find()

请参阅此 Java 演示


推荐阅读