4

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

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

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

请帮助改进我的方法。

有效字符串示例:

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

4 回答 4

8

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

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

Java 正则表达式参考

于 2016-02-09T08:08:53.697 回答
4

我需要类似的东西p{IsLatin}

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

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

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

整个表达式意味着匹配一个或多个 Unicode 字母而不是 ASCII 字母

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

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

请参阅IDEONE 演示

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
于 2016-02-09T08:18:31.867 回答
1

只需在匹配器中添加一个空格:

private boolean isLatin(String val) {
    return val.matches("[ \\w]+");
}
于 2016-02-09T08:11:12.647 回答
0

用户这个:

public static boolean isNoAlphaNumeric(String s) {
       return s.matches("[\\p{L}\\s]+");
}
  • \p{L}表示任何 Unicode 字母。
  • \s空格字符
于 2016-02-09T08:11:45.707 回答