检查该字符串是否包含非拉丁字母

时间:2016-02-09 08:05:37

标签: java regex latin

我有以下方法来检查字符串是否只包含拉丁符号。

private boolean containsNonLatin(String val) {
        return val.matches("\\w+");
}

但是如果我传递字符串my string它会返回false,因为它包含空格。 但是我需要一个方法来检查如果字符串包含不是拉丁字母的字母,它应该返回false,并且在所有其他情况下它应该返回true。

请帮助改进我的方法。

有效字符串的示例:

w123.
w, 12
w#123
dsf%&@

4 个答案:

答案 0 :(得分:6)

您可以使用\p{IsLatin}类:

return !(var.matches("[\\p{Punct}\\p{Space}\\p{IsLatin}]+$"));

Java Regex Reference

答案 1 :(得分:2)

  

我需要的不是p{IsLatin}

如果您需要匹配除拉丁ASCII字母之外的所有字母,您可以使用

"[\\p{L}\\p{M}&&[^\\p{Alpha}]]+"

\p{Alpha} POSIX类匹配[A-Za-z]\p{L}匹配任何Unicode基本字母,\p{M}匹配变音符号。当我们添加&&[^\p{Alpha}]时,我们会从所有Unicode字母中减去这些[A-Za-z]

整个表达式意味着匹配ASCII字母以外的一个或多个Unicode字母

要添加空格,只需添加\s

即可
"[\\s\\p{L}\\p{M}&&[^\\p{Alpha}]]+"

请参阅IDEONE demo

List<String> strs = Arrays.asList("w123.", "w, 12", "w#123", "dsf%&@", "Двв");
for (String str : strs)
    System.out.println(!str.matches("[\\s\\p{L}\\p{M}&&[^\\p{Alpha}]]+")); // => 4 true, 1 false

答案 2 :(得分:1)

只需为匹配器添加空格:

private boolean isLatin(String val) {
    return val.matches("[ \\w]+");
}

答案 3 :(得分:0)

用户:

public static boolean isNoAlphaNumeric(String s) {
       return s.matches("[\\p{L}\\s]+");
}
  • \p{L}表示任何Unicode字母。
  • \s空格字符