我有以下方法来检查字符串是否只包含拉丁符号。
private boolean containsNonLatin(String val) {
return val.matches("\\w+");
}
但是如果我传递字符串my string
它会返回false,因为它包含空格。
但是我需要一个方法来检查如果字符串包含不是拉丁字母的字母,它应该返回false,并且在所有其他情况下它应该返回true。
请帮助改进我的方法。
有效字符串的示例:
w123.
w, 12
w#123
dsf%&@
答案 0 :(得分:6)
您可以使用\p{IsLatin}
类:
return !(var.matches("[\\p{Punct}\\p{Space}\\p{IsLatin}]+$"));
答案 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
空格字符