Java 检查字符串是否只包含拉丁字符?
您好 我正在开发GWT应用程序,用户可以用日语输入他的详细信息。 但是“userid”和“password”应该只包含英文字符(拉丁字母)。 如何对此验证字符串?您可以使用一点来验证。拉丁字符包含在Java 检查字符串是否只包含拉丁字符?,java,string,validation,gwt,Java,String,Validation,Gwt,您好 我正在开发GWT应用程序,用户可以用日语输入他的详细信息。 但是“userid”和“password”应该只包含英文字符(拉丁字母)。 如何对此验证字符串?您可以使用一点来验证。拉丁字符包含在\w中 因此,这应该做到: boolean valid = input.matches("\\w+"); 顺便说一句,这也包括数字和下划线\uuuz。不确定这是否有害。否则,您只需使用[A-Za-z]+即可 如果您还想覆盖(ä、ò、ò等等,这些都是符合定义的拉丁字符),那么您需要首先对它们进行规范化
\w
中
因此,这应该做到:
boolean valid = input.matches("\\w+");
顺便说一句,这也包括数字和下划线\uuuz
。不确定这是否有害。否则,您只需使用[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。可能有更好的方法,但您可以使用您认为可以接受的字符加载集合,然后对照该集合检查用户名/密码字段中的每个字符 伪:
foreach (character in username)
{
if !allowedCharacters.contains(character)
{
throw exception
}
}
对于这样简单的事情,我会使用正则表达式
private static final Pattern p = Pattern.compile("\\p{Alpha}+");
static boolean isValid(String input) {
Matcher m = p.matcher(input);
return m.matches();
}
还有其他预定义类,如\w
,可能工作得更好
public static boolean isValidISOLatin1 (String s) {
return Charset.forName("US-ASCII").newEncoder().canEncode(s);
} // or "ISO-8859-1" for ISO Latin 1
如需参考,请参阅。我成功地结合使用了user232624的答案,以及:
这是我的解决方案,它工作得非常好
public static boolean isStringContainsLatinCharactersOnly(final String iStringToCheck)
{
return iStringToCheck.matches("^[a-zA-Z0-9.]+$");
}
有英文字符吗?!?!我认为英语中的字符来自拉丁字母表。如果他指的是ascii字符,那么我称之为英语字符。。或者美国。
\p{L}
被记录在案:德拉特,你说得对。我发誓我已经多年没有在API文档中看到它了。你是Sun API文档的维护者吗?不是,但我阅读这个特定的JavaDoc页面的次数比我想承认的要多;-)Unicode字母类别\p{L}
也涵盖了很多非拉丁字母。我认为您需要\p{script=Latin}
我不会使用它,因为这允许输入包含空格和控制字符(包括U+0000),这在用户名中几乎肯定是不受欢迎的。
public static boolean isStringContainsLatinCharactersOnly(final String iStringToCheck)
{
return iStringToCheck.matches("^[a-zA-Z0-9.]+$");
}