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

mnowg1ta  于 2023-08-02  发布在  Java
关注(0)|答案(6)|浏览(145)

你好
我正在开发GWT应用程序,用户可以输入他的详细资料在日本。但是“用户名”和“密码”应该只包含英文字符(拉丁字母)。如何验证字符串?

t5fffqht

t5fffqht1#

您可以使用String#matches()和一个位正则表达式来实现这一点。拉丁字符由\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。

x3naxklr

x3naxklr2#

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

字符串
有关参考,请参见documentation on Charset

doinxwow

doinxwow3#

这就是我的解决方案,而且效果非常好

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

字符串

wqsoz72f

wqsoz72f4#

可能有更好的方法,但是您可以用您认为可以接受的任何字符加载一个集合,然后根据该集合检查用户名/密码字段中的每个字符。
伪:

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

字符串

l7wslrjt

l7wslrjt5#

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

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

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

字符串
还有其他预定义的类,如\w,可能会工作得更好。

piah890a

piah890a6#

我成功地使用了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);
}

字符串

相关问题