检查字符串是否仅包含拉丁字符?

2022-09-03 08:29:25

问候

我正在开发GWT应用程序,用户可以在其中用日语输入他的详细信息。但是“userid”和“password”应该只包含英文字符(拉丁字母)。如何为此验证字符串?


答案 1

您可以使用 String#matches() 和位正则表达式来实现此目的。拉丁字符由 覆盖。\w

所以这应该可以:

boolean valid = input.matches("\\w+");

顺便说一句,这也涵盖了 数字和下划线 。不确定这是否有害。否则,您可以改用。_[A-Za-z]+

如果您还想覆盖变音字符(ä,é,ò等,这些也是每个定义的拉丁字符),那么您需要首先规范化它们并在匹配之前删除变音符号,仅仅是因为没有(记录的)正则表达式覆盖变音符号。

String clean = Normalizer.normalize(input, Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
boolean valid = clean.matches("\\w+");

更新:Java中有一个未记录的正则表达式,它也涵盖了变音符号,.\p{L}

boolean valid = input.matches("\\p{L}+");

以上适用于 Java 1.6。


答案 2
public static boolean isValidISOLatin1 (String s) {
    return Charset.forName("US-ASCII").newEncoder().canEncode(s);
} // or "ISO-8859-1" for ISO Latin 1

有关参考,请参阅有关字符集的文档