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

时间:2009-12-16 02:32:24

标签: java string validation gwt

问候,

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

6 个答案:

答案 0 :(得分:35)

您可以String#matches()使用regex位。拉丁字符由\w覆盖。

所以这应该做:

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

顺便提一下,这也涵盖数字和下划线_。不确定是否有害。否则,您只能使用[A-Za-z]+

如果你想覆盖diacritical characters(ä,é,ò等等,根据定义也是拉丁字符),那么你需要先对它们进行标准化,然后摆脱变音标记。匹配,只是因为没有(记录)正则表达式,它涵盖了变音符号。

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。

答案 1 :(得分:9)

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

供参考,请参阅documentation on Charset

答案 2 :(得分:2)

可能有更好的方法,但您可以使用您认为可接受的字符加载集合,然后针对该集合检查用户名/密码字段中的每个字符。

伪:


foreach (character in username)
{
    if !allowedCharacters.contains(character)
    {
        throw exception
    }
}

答案 3 :(得分:2)

对于这么简单的事情,我会使用正则表达式。

private static final Pattern p = Pattern.compile("\\p{Alpha}+");

static boolean isValid(String input) {
  Matcher m = p.matcher(input);
  return m.matches();
}

还有其他预定义的类,如\w可能会更好。

答案 4 :(得分:1)

我成功使用了user232624,Joachim SauerTvaroh的答案组合:

static CharsetEncoder asciiEncoder = Charset.forName("US-ASCII"); // or "ISO-8859-1" for ISO Latin 1

boolean isValid(String input) {    
    return Character.isLetter(ch) && asciiEncoder.canEncode(username);
}

答案 5 :(得分:0)

有我的解决方案,它运作良好

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