Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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_Regex_Validation_Unicode_Internationalization - Fatal编程技术网

Java 西里尔字母表验证

Java 西里尔字母表验证,java,regex,validation,unicode,internationalization,Java,Regex,Validation,Unicode,Internationalization,今天我遇到了一个有趣的缺陷,问题是我在俄罗斯部署了一个web应用程序,在下面的方法中,名称值“khааааааааааааа。想知道人们会如何处理这样的问题吗邓肯 private boolean isAlphaNumeric(String str) { return str.matches("[\\w-']+"); } 您必须使用Unicode正则表达式。例如,任何unicode字母的\p{L}+。有关java.util.Pattern的更多信息,请查看java文档中的unicode支

今天我遇到了一个有趣的缺陷,问题是我在俄罗斯部署了一个web应用程序,在下面的方法中,名称值“khааааааааааааа。想知道人们会如何处理这样的问题吗邓肯

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

您必须使用Unicode正则表达式。例如,任何unicode字母的
\p{L}+
。有关
java.util.Pattern
的更多信息,请查看java文档中的unicode支持部分。另外,这里还有一些细节:

在我的例子中,我必须检查它是否是用俄语写的名字

我的结局是:

private static final String ruNameRegEx = "[А-ЯЁ][-А-яЁё]+";
至于全名:

private static final String ruNamePart = "[А-яЁё][-А-яЁё]+";
private static final String ruFullNameRegEx = "\\s*[А-ЯЁ][-А-яЁё]+\\s+(" + ruNamePart + "\\s+){1,5}" + ruNamePart + "\\s*";)";
最后一个涉及一些复杂的情况:

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();
    }
}

确切地我怎么能接受正确的答案?我不明白!请帮忙@尤金:你指的是我提供的答案吗?不管我怎么想,我都可以通过点击复选框来接受答案。我接受了你的回答,谢谢你提供的信息