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

Ash*_*iya 13 java string validation gwt

问候,

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

Bal*_*usC 35

您可以使用String#matches()一点正则表达式.拉丁字符涵盖\w.

所以这应该做:

boolean valid = input.matches("\\w+");
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这也包括数字和下划线_.不确定是否有害.否则你可以[A-Za-z]+改用它.

如果你想要覆盖变音符号(ä,é,ò等等,那些符号也是拉丁字符),那么你需要先对它们进行归一化,然后在匹配之前去除变音符号,因为没有(记录在案的)正则表达式,涵盖了变音符号.

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

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

boolean valid = input.matches("\\p{L}+");
Run Code Online (Sandbox Code Playgroud)

以上工作在Java 1.6.

  • `\ p {L}`记录在案:http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html#ubc (2认同)

小智 9

public static boolean isValidISOLatin1 (String s) {
    return Charset.forName("US-ASCII").newEncoder().canEncode(s);
} // or "ISO-8859-1" for ISO Latin 1
Run Code Online (Sandbox Code Playgroud)

有关参考,请参阅Charset上文档.

  • 你忘了在charset上调用'newEncoder()'. (2认同)

Ale*_*nko 5

这是我的解决方案,并且效果很好

public static boolean isStringContainsLatinCharactersOnly(final String iStringToCheck)
{
    return iStringToCheck.matches("^[a-zA-Z0-9.]+$");
}
Run Code Online (Sandbox Code Playgroud)