Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查字符串是否只包含拉丁字符?_Java_String_Validation_Gwt - Fatal编程技术网

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

Java 检查字符串是否只包含拉丁字符?,java,string,validation,gwt,Java,String,Validation,Gwt,您好 我正在开发GWT应用程序,用户可以用日语输入他的详细信息。 但是“userid”和“password”应该只包含英文字符(拉丁字母)。 如何对此验证字符串?您可以使用一点来验证。拉丁字符包含在\w中 因此,这应该做到: boolean valid = input.matches("\\w+"); 顺便说一句,这也包括数字和下划线\uuuz。不确定这是否有害。否则,您只需使用[A-Za-z]+即可 如果您还想覆盖(ä、ò、ò等等,这些都是符合定义的拉丁字符),那么您需要首先对它们进行规范化

您好

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

您可以使用一点来验证。拉丁字符包含在
\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.]+$");
}