Проверка кириллицы - PullRequest
11 голосов
/ 06 июня 2011

Сегодня я столкнулся с интересным недостатком: проблема в том, что у меня развернуто мое веб-приложение в России, а значение имени «Наталья» не возвращает true в виде буквенно-цифрового метода, описанного ниже.Любопытно, что люди подойдут к такой проблеме!- Дункан

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

Ответы [ 2 ]

14 голосов
/ 06 июня 2011

Вы должны использовать регулярные выражения Unicode. например \p{L}+ для любой буквы Юникода. Для получения дополнительной информации в java doc для java.util.Pattern есть раздел под названием поддержка юникода . Также здесь есть подробности: ссылка

10 голосов
/ 26 июня 2015

В моем случае я должен проверить, написано ли это имя на русском языке.

Я закончил с этим:

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...