Подтвердить с помощью REGEX alpha с поддержкой на многих языках

1

Привет, ребята, я работаю в библиотеке валидатора Java. Мой вопрос: как я могу проверить, что входные данные являются альфа (нет буквенно-цифровых) на многих языках. У меня есть следующий REGEX:

public AlphaValidator() {
    super();
    this.rule = "^[a-zA-Z[*]]+$"; // its fine with : angel, world, bottle, etc.
}

Это нормально, но если библиотека реализована для испанских входов или французских, возможно, со словами типа: vi un ñandu или árbol не соответствуют REGEX.

Я писал специальные символы:

private String getSpanishFilter() {
    return "-ñ-Ñ-á-Á-é-É-í-Í-ó-Ó-ú-Ú-ü-Ü";
}

private String getFrenchFilter() {
    return "â-à-ç-é-ê-ë-è-ï-î-ô-û-ù-Â-À-Ç-É-Ê-Ë-È-Ï-Î-Ô-Û-Ù";
}

Но я думаю, что это не лучшее решение. Любая помощь?

Теги:

3 ответа

3
Лучший ответ

Не понимаю, почему вы вложили * внутри вложенного символьного класса. Это не что иное, как объединение, и так же хорошо, как использовать только *. И чтобы совместить буквы Юникода, вы можете использовать \p{L}.

И если вы уже на Java 7, вы можете использовать флаг Pattern.UNICODE_CHARACTER_CLASS или встроенный флаг - (?U) с заданным шаблоном:

Pattern p = Pattern.compile("^[*\\w&&[^\\d_]]+$", Pattern.UNICODE_CHARACTER_CLASS);

И если вы сохраняете регулярное выражение как строку, тогда используйте встроенный флаг как:

rule = "(?U)^[*\\w&&[^\\d_]]+$";
  • 0
    Извините, я забыл объяснить этот момент. Я думал заменить [*] на новые символы из других языков, инкапсулированных в этих методах.
1

Вы посмотрели документы для шаблона?

В разделе "Классы для Unicode-скриптов, блоков, категорий и двоичных свойств":

\p{IsAlphabetic}    An alphabetic character (binary property)

Таким образом, ваша модель может быть:

"\\p{IsAlphabetic}+"
0

Самый короткий путь со matches():

\\pL+    # no need to add anchors with matches() method

Самый короткий путь с find():

\\PL     # stop at the first non letter character

Примечание: вы можете также писать \\p{L} и \\P{L}, \\pL и \\PL - ярлыки.

Но если вам нужно соответствовать только латинским символам, лучше использовать:

\\p{isLatin}+

Ещё вопросы

Сообщество Overcoder
Наверх
Меню