Java регулярное выражение для проверки имени - PullRequest
3 голосов
/ 16 июля 2010

Для проверки имен, которые могут быть

Джон, Джон Пол и т. Д.

Я использую это регулярное выражение:

String regex = "[A-Z]([a-z]+|\\s[a-z]+)";

но когда я делаю:

boolean ok = Pattern.matches(regex, "John Paul");

совпадения не пройдены?

Почему? Я хочу использовать совпадения для проверки строки в целом ...

Это регулярное выражение неправильно?

Ответы [ 3 ]

6 голосов
/ 16 июля 2010

У вас будет много проблем с проверкой имен - есть много разных типов имен. Рассмотрим:

  • Жан-Люк Пикард
  • Carmilla Parker-Bowles
    • Жанна д'Арк
  • Мэтт Леблан
  • Чан Конг-сан (настоящее имя Джеки Чана)
  • Пинк
  • Love Symbol #2

Самое простое, что нужно сделать, это заставить пользователя ввести свое имя и принять его как есть. Если вы хотите разбить его на личные имена и фамилии для таких вещей, как персонализация, я предлагаю вам разбить поля ввода на две (или более) части или просто попросить поле «предпочтительное имя» или «псевдоним» .

Я сомневаюсь, что вы найдете регулярное выражение, которое может проверять все разнообразие имен - получите большой набор образцов данных (предпочтительно реальных), прежде чем вы начнете пытаться.

4 голосов
/ 16 июля 2010

Paul имеет заглавную букву P, и ваше регулярное выражение не учитывает заглавные буквы в начале второго слова.

3 голосов
/ 16 июля 2010

Попробуйте что-то вроде этого:

[A-Z][a-z]+( [A-Z][a-z]+)?

? - необязательная часть, соответствующая фамилии.Это захватывает фамилию (с предшествующим пробелом) в группе 1. Вы можете использовать группу без захвата (?:...), если вам не нужен этот захват.

Ссылки


Проблема с исходным рисунком

Вот исходный образец:

[A-Z]([a-z]+|\s[a-z]+)

Расширение чередования, которое соответствует:

[A-Z][a-z]+

Или:

[A-Z]\s[a-z]+

Это соответствует John и J paul, но явно не соответствует John Paul.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...