检查字符串是否只包含拉丁字符?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查字符串是否只包含拉丁字符?相关的知识,希望对你有一定的参考价值。
问候,
我正在开发GWT应用程序,用户可以用日语输入他的详细信息。但'userid'和'password'应该只包含英文字符(拉丁字母)。如何验证字符串?
答案
你可以使用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。
另一答案
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。
另一答案
可能有更好的方法,但您可以使用您认为可接受的字符加载集合,然后针对该集合检查用户名/密码字段中的每个字符。
伪:
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
,可能会更好。
另一答案
我成功地使用了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);
}
另一答案
有我的解决方案,它的工作非常好
public static boolean isStringContainsLatinCharactersOnly(final String iStringToCheck)
{
return iStringToCheck.matches("^[a-zA-Z0-9.]+$");
}
以上是关于检查字符串是否只包含拉丁字符?的主要内容,如果未能解决你的问题,请参考以下文章