我有一个表单中的电子邮件字段,该字段当前使用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演示。