你好我正在开发GWT应用程序,用户可以输入他的详细资料在日本。但是“用户名”和“密码”应该只包含英文字符(拉丁字母)。如何验证字符串?
t5fffqht1#
您可以使用String#matches()和一个位正则表达式来实现这一点。拉丁字符由\w覆盖。所以这应该可以做到:
String#matches()
\w
boolean valid = input.matches("\\w+");
字符串顺便说一下,这也包括数字和下划线_。不确定这是否有害。否则,您可以使用[A-Za-z]+代替。如果你也想覆盖diacritical characters(ä、é、ò等等,这些也是拉丁字符),那么你需要首先规范化它们,并在匹配之前去掉变音符号,这仅仅是因为没有覆盖变音符号的 (文档) 正则表达式。
_
[A-Za-z]+
String clean = Normalizer.normalize(input, Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); boolean valid = clean.matches("\\w+");
型
更新:Java中有一个未文档化的正则表达式,它也涵盖了变音符号,\p{L}。
\p{L}
boolean valid = input.matches("\\p{L}+");
型上面的工作在Java 1.6。
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。
doinxwow3#
这就是我的解决方案,而且效果非常好
public static boolean isStringContainsLatinCharactersOnly(final String iStringToCheck) { return iStringToCheck.matches("^[a-zA-Z0-9.]+$"); }
字符串
wqsoz72f4#
可能有更好的方法,但是您可以用您认为可以接受的任何字符加载一个集合,然后根据该集合检查用户名/密码字段中的每个字符。伪:
foreach (character in username) { if !allowedCharacters.contains(character) { throw exception } }
l7wslrjt5#
对于这么简单的东西,我会使用正则表达式。
private static final Pattern p = Pattern.compile("\\p{Alpha}+"); static boolean isValid(String input) { Matcher m = p.matcher(input); return m.matches(); }
字符串还有其他预定义的类,如\w,可能会工作得更好。
piah890a6#
我成功地使用了user232624、Joachim Sauer和Tvaroh的答案的组合:
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); }
6条答案
按热度按时间t5fffqht1#
您可以使用
String#matches()
和一个位正则表达式来实现这一点。拉丁字符由\w
覆盖。所以这应该可以做到:
字符串
顺便说一下,这也包括数字和下划线
_
。不确定这是否有害。否则,您可以使用[A-Za-z]+
代替。如果你也想覆盖diacritical characters(ä、é、ò等等,这些也是拉丁字符),那么你需要首先规范化它们,并在匹配之前去掉变音符号,这仅仅是因为没有覆盖变音符号的 (文档) 正则表达式。
型
更新:Java中有一个未文档化的正则表达式,它也涵盖了变音符号,
\p{L}
。型
上面的工作在Java 1.6。
x3naxklr2#
字符串
有关参考,请参见documentation on Charset。
doinxwow3#
这就是我的解决方案,而且效果非常好
字符串
wqsoz72f4#
可能有更好的方法,但是您可以用您认为可以接受的任何字符加载一个集合,然后根据该集合检查用户名/密码字段中的每个字符。
伪:
字符串
l7wslrjt5#
对于这么简单的东西,我会使用正则表达式。
字符串
还有其他预定义的类,如
\w
,可能会工作得更好。piah890a6#
我成功地使用了user232624、Joachim Sauer和Tvaroh的答案的组合:
字符串