我想使用Validators验证一些JSF的字段。 我正在寻找一种模式来验证仅包含以下字符的字符串:
AÁÂÄBCÇDEÉÈÊËFGHIÎÏJKLMNOÔÖPQRSTUÛÜÙVWXYZaàâäbcçdeéèêëfghiîïjklmnoôöpqrstuûüùvwxyÿz
我正在使用此模式[A-Za-zÀ-ÿ]*\s\'\-
,但是它不起作用:
我的代码:
public Boolean isValid(String str) throws PatternSyntaxException {
Pattern pattern = Pattern.compile("[A-Za-zÀ-ÿ]*\s\'\-");
Matcher matcher = pattern.matcher(str);
Boolean result = matcher.matches();
return result;
}
答案 0 :(得分:1)
如果找到字符的顺序不是问题,则下面的代码可能对您有用
public Boolean isValideName(String nom) throws PatternSyntaxException {
Pattern pattern = Pattern.compile("[A-Za-zÀ-ÿ '-]*");
Matcher matcher = pattern.matcher(nom);
boolean result = matcher.matches();
return result;
}
或者,您也可以编写带否定的模式,这将找到与这些字符不匹配的单个模式。像下面这样的东西可能也有帮助
public Boolean isValideName(String nom) throws PatternSyntaxException {
Pattern pattern = Pattern.compile("[^A-Za-zÀ-ÿ '-]*");
Matcher matcher = pattern.matcher(nom);
boolean result = matcher.matches();
return !result;
}
[^A-Za-zÀ-ÿ '-]*
在这里,我们正在搜索列表中未包含的任何字符,包括空格
答案 1 :(得分:1)
已经有一个拉丁文字的课程:\p{IsLatin}
Pattern p = Pattern.compile("[-' \\p{IsLatin}]*");
Matcher m = p.matcher("AÁÂÄBCÇDEÉÈÊËFGHIÎÏJKLMNOÔÖPQRSTUÛÜÙVWXYZaàâäbcçdeéèêëfghiîïjklmnoôöpqrstuûüùvwxyÿz '-");
if(m.matches()) {
System.out.println("Success!");
}
除非您要限制使用ASCII扩展字符集,否则我不建议您使用范围À-ÿ
。该范围的另一个问题是,它包含非拉丁字符,例如the(÷)。
(除此之外,您的反斜杠语法也存在问题,并且无法将所有内容都放入重复的字符类中。但是,其他答案已经涵盖了该问题,因此我不再重复他们已经说过的内容。)< / p>
答案 2 :(得分:0)
您可以使用
[\u0020'\-A-Za-zÁ-ÂÄÇ-ËÎ-ÏÔÖÙÛ-Üàâäç-ëî-ïôöùû-üÿ]
或
[\u0020\u0027\u002D\u0041-\u005A\u0061-\u007A\u00C1-\u00C2\u00C4\u00C7-\u00CB\u00CE-\u00CF\u00D4\u00D6\u00D9\u00DB-\u00DC\u00E0\u00E2\u00E4\u00E7-\u00EB\u00EE-\u00EF\u00F4\u00F6\u00F9\u00FB-\u00FC\u00FF]
使用工具来制作范围https://docs.aws.amazon.com/cli/latest/reference/lambda/delete-function.html
然后按十六进制转换按钮以获取课程。