西里尔字母验证

Dun*_*ebs 11 java regex unicode validation internationalization

我今天遇到了一个有趣的缺陷,问题是我在俄罗斯部署了我的Web应用程序,名称值"Наталья"在下面的方法中没有返回true作为alphaNumeric.对于人们如何处理这样的问题的一些意见感到好奇! - 邓肯

private boolean isAlphaNumeric(String str) {
    return str.matches("[\\w-']+");
}
Run Code Online (Sandbox Code Playgroud)

Op *_*kel 14

您必须使用Unicode正则表达式.例如,\p{L}+对于任何unicode字母.有关Java文档的更多信息,请参阅java.util.Pattern名为unicode支持的部分.此外,还有详细信息:链接


Lu5*_*u55 10

在我的情况下,我必须检查它是否是用俄语写的名字.

我最终得到了这个:

private static final String ruNameRegEx = "[?-??][-?-???]+";
Run Code Online (Sandbox Code Playgroud)

并为全名:

private static final String ruNamePart = "[?-???][-?-???]+";
private static final String ruFullNameRegEx = "\\s*[?-??][-?-???]+\\s+(" + ruNamePart + "\\s+){1,5}" + ruNamePart + "\\s*";)";
Run Code Online (Sandbox Code Playgroud)

最后一个涉及一些复杂的案例:

public class Test {
    Pattern ruFullNamePattern = Pattern.compile(ruFullNameRegEx);

    @Test
    public void test1() {
        assertTrue(isRuFullName("?????? ??????? ????????"));
    }

    @Test
    public void test2() {
        assertTrue(isRuFullName(" ?????? ??????? ???????? "));
    }

    @Test
    public void test3() {
        assertTrue(isRuFullName("????? ??????? ????????"));
    }

    @Test
    public void test4() {
        assertTrue(isRuFullName("?????? ??????? ?????????"));
    }

    @Test
    public void test5() {
        assertFalse(isRuFullName("?????? ??????? ????????"));
    }

    @Test
    public void test6() {
        assertFalse(isRuFullName("?????? ?.?."));
    }

    @Test
    public void test7() {
        assertTrue(isRuFullName("?????-??????? ????-????? ????????"));
    }

    @Test
    public void test8() {
        assertTrue(isRuFullName("????? ???????? ??????-????-???"));
    }

    @Test
    public void test9() {
        assertTrue(isRuFullName("????? ???????? ??? ??????"));
    }

    private boolean isRuFullName(String testString) {
        Matcher m = ruFullNamePattern.matcher(testString);
        return m.matches();
    }
}
Run Code Online (Sandbox Code Playgroud)