Регулярное выражение для строки имени

0

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

Тот, который я сейчас использую, выглядит так:

/^[A-Za-zåäöÅÄÖ\s\-\ ]*$/

Он позволяет использовать дефисы и пробелы, но также позволяет им в начале или конце строки, которую я не хочу разрешать.

Мне нужно изменить это, чтобы разрешить:

Специальные письма, такие как éýÿüåäö и т.д. (Желательно, не записывая их вручную) Заглавная буква в начале каждого нового слова Пробел между словами - дефисы между словами, но не до или после полной строки

Он не должен позволять номера, которых он еще не сделал. Поскольку я не работал много с конструкцией регулярных выражений, я в темноте о том, как добиться этого, я нашел много решений, которые покрывают один или другой сценарий, но не все те, которые мне нужны. Я был бы признателен за помощь. Регулярное выражение должно работать для проверки PHP.

EDIT:

$fname = 'Scrooge Mc-Duck'; //Only example string
$fname = trim($fname);

if (!preg_match('/^\p{Lu}\p{Ll}+([ -]+\p{Lu}\p{Ll}+)*$/', $fname)) {
    $fnameErr = 'Invalid first name'; 
}

Это выводит ошибку при использовании решения @npinti.

  • 0
    Какой regex двигатель / платформа?
  • 0
    @AlexK. Я использую PHP для проверки, если это то, что вы имеете в виду.
Показать ещё 5 комментариев
Теги:
validation

1 ответ

0

Предполагая, что ваш механизм регулярных выражений может выставлять классы символов. Вы можете использовать \p{L} для соответствия любой букве. Итак, чтобы совместить имя, вы можете использовать ^\p{Lu}\p{Ll}+([ -]+\p{Lu}\p{Ll}+)*$.

Это позволит вам сопоставить букву с верхним регистром, за которой следует одна или несколько строчных букв. В свою очередь, за этим может следовать комбинация из 0 или более белых пробелов и тире, а затем следует буква верхнего регистра и одна или несколько строчных букв. ^ И $ в начале и в конце убедитесь, что регулярное выражение соответствует всей строке.

Демонстрацию регулярного выражения можно посмотреть здесь.

  • 0
    К сожалению, это не подтверждается, есть ли альтернатива?
  • 0
    @Chrillewoodz: Какую версию PHP вы используете?
Показать ещё 13 комментариев

Ещё вопросы

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