正则表达式重音字符的特殊领域

时间:2018-08-07 17:33:48

标签: java regex validation jsf

我想使用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;
}

3 个答案:

答案 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
然后按十六进制转换按钮以获取课程。

然后使用转换工具http://www.regexformat.com/scrn8/Uunique.jpg

将十六进制转换回Unicode字符。