Я пытаюсь найти регулярное выражение, которое покрывает много результатов, тот, который я использую сейчас, будет достаточным, если бы не много международных имен, имеющих специальные буквы в них, а также дефисы.
Тот, который я сейчас использую, выглядит так:
/^[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.
Предполагая, что ваш механизм регулярных выражений может выставлять классы символов. Вы можете использовать \p{L}
для соответствия любой букве. Итак, чтобы совместить имя, вы можете использовать ^\p{Lu}\p{Ll}+([ -]+\p{Lu}\p{Ll}+)*$
.
Это позволит вам сопоставить букву с верхним регистром, за которой следует одна или несколько строчных букв. В свою очередь, за этим может следовать комбинация из 0 или более белых пробелов и тире, а затем следует буква верхнего регистра и одна или несколько строчных букв. ^
И $
в начале и в конце убедитесь, что регулярное выражение соответствует всей строке.
Демонстрацию регулярного выражения можно посмотреть здесь.