簡體   English   中英

如何使用正則表達式防止 Java 中的 email 字段中的重音字符?

[英]How to prevent accented characters in an email field in Java using regex?

我有一個 email 字段,該字段當前使用 GenericValidator.isEmail 方法進行驗證。 但是現在我需要應用另一個驗證,以防止將重音字符發送到 email 地址。 所以我正在考慮使用正則表達式模式匹配方法,我在 stackoverflow 本身中找到了一個

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

問題是我在模式中只看到 é è à ù 字符,但還有其他幾個重音字符,如 õ ü ì 等。那么有沒有一種方法可以為所有類型的重音字符匹配模式? 我需要匹配 NL(荷蘭語)、FR(法語)和 DE(德語)語言的重音字符。 我需要檢查我的 email 地址是否有任何重音字符,是否需要在那里停止執行並拋出錯誤

事實證明,您想要匹配除 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 演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM