如何使用regex在Java中防止电子邮件字段中出现重音字符



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

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

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

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

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

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

这里,

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

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

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

请参阅此Java演示。

相关内容

  • 没有找到相关文章

最新更新