检查字符串是否仅包含拉丁字符?
2022-09-03 08:29:25
问候
我正在开发GWT应用程序,用户可以在其中用日语输入他的详细信息。但是“userid”和“password”应该只包含英文字符(拉丁字母)。如何为此验证字符串?
问候
我正在开发GWT应用程序,用户可以在其中用日语输入他的详细信息。但是“userid”和“password”应该只包含英文字符(拉丁字母)。如何为此验证字符串?
您可以使用 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。
public static boolean isValidISOLatin1 (String s) {
return Charset.forName("US-ASCII").newEncoder().canEncode(s);
} // or "ISO-8859-1" for ISO Latin 1
有关参考,请参阅有关字符集的文档。