java - java - 如何使用正则表达式防止Java电子邮件字段中的重音字符?
问题描述
我有一个表单中的电子邮件字段,该表单当前使用 GenericValidator.isEmail 方法进行了验证。但现在我需要应用另一个验证,以防止将重音字符发送到电子邮件地址。所以我正在考虑使用正则表达式模式匹配方法,我在 stackoverflow 本身中找到了一个
if (Pattern.matches(".*[éèàù].*", input)) {
// your code
}
问题是我在模式中只看到 é è à ù 字符,但还有其他几个重音字符,如 õ ü ì 等。那么有没有一种方法可以为所有类型的重音字符匹配模式?我需要匹配 NL(荷兰语)、FR(法语)和 DE(德语)语言的重音字符。我需要检查我的电子邮件地址是否有任何重音字符以及它是否需要在那里停止执行并抛出错误
解决方案
事实证明,您想要匹配除 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 演示。
推荐阅读
- docker-compose - Docker-compose 卷映射到外部 USB 驱动器
- python - CUDA GPU processing: TypeError: compile_kernel() got an unexpected keyword argument 'boundscheck'
- python - 如何使用包含列表中值的字典扩展 pydatable 的列?
- java - 从文件中读取数组元素时出现 NullPointerException 错误 - Java
- android - 如何将 Firebase 中的图像检索到我的 android 应用程序中?
- mongodb - 在 docker 容器中运行 mongo
- r - 未使用参数 umap 的 DimPlot
- hyperlink - 为什么建议为魔术链接 JWT 令牌提供比通过 HTTP 传递的令牌更短的 TTL,为什么是一次性的?
- c++ - 如何使 c++ 使用 cin 可选?
- python-3.x - 使用 datetime 和 timedelta 为我的代码创建一个函数