java - significado - Validación alfabeto cirílico
alfabeto ruso antiguo (2)
Tienes que usar la expresión regular Unicode. por ejemplo /p{L}+
para cualquier letra Unicode. Para obtener más información en el documento de Java para java.util.Pattern
hay una sección llamada soporte Unicode . Además, hay detalles aquí: enlace
Hoy me encontré con un defecto interesante, el problema es que tengo una implementación de mi aplicación web en Rusia y el valor del nombre "Наталья" no está volviendo verdadero como alphaNumeric en el siguiente método. ¡Curioso por alguna información sobre cómo las personas abordarían un problema como este! - Duncan
private boolean isAlphaNumeric(String str) {
return str.matches("[//w-'']+");
}
En mi caso, debo verificar si es un nombre escrito en ruso.
Terminé con esto:
private static final String ruNameRegEx = "[А-ЯЁ][-А-яЁё]+";
y para el nombre completo:
private static final String ruNamePart = "[А-яЁё][-А-яЁё]+";
private static final String ruFullNameRegEx = "//s*[А-ЯЁ][-А-яЁё]+//s+(" + ruNamePart + "//s+){1,5}" + ruNamePart + "//s*";)";
El último cubre algunos casos complejos:
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();
}
}