Поиск регулярного выражения для проверки правильного английского имени, то есть:
space
Допустимый пример: John von Neumann
Благодаря!
EDIT (добавленный код проверки):
#!/usr/bin/php <?php function check_name($regex, $name) { $rc = 'Bad'; if (preg_match($regex, $name)) { $rc = 'Good'; } return '|' . $name . '| ' . $rc . "\n"; } $regex = '/(?:[A-Za-z]+(?:\s+|$)){2,3}/'; echo check_name($regex, 'First'); echo check_name($regex, 'First Last'); echo check_name($regex, 'Two Spaces'); echo check_name($regex, 'First Middle Last'); echo check_name($regex, 'First Middle Last Fourth'); echo check_name($regex, 'First 123'); ?>
Если правила, о которых вы заявили, на самом деле вы хотите, будут работать следующие:
/^(?:[A-Za-z]+(?:\s+|$)){2,3}$/
Тем не менее, существует немало реальных имен, которые не вписываются в эти правила, такие как «O'Malley», «Jo-Jo» и т. Д.
Вы можете, конечно, расширить это регулярное выражение достаточно легко, чтобы другие символы могли просто добавить их в скобки. Например, чтобы разрешить апострофы и тире, вы можете использовать [A-Za-z'-]
(конец должен быть в конце или он будет интерпретироваться как диапазон).
Ваше имя будет неудачным для О'Нила. Также Уэбб-Смитс и тому подобное.
Используйте @ Amber:
/(?:[A-Za-z.'-]+\s*){2,3}/
Можешь попробовать:
if(preg_match('/^([az]+ ){1,2}[az]+$/i',trim($input))) { // valid full name. }
Как отмечают другие, это позволит НЕТ пунктуации в названии!
Это плохая идея . У людей могут быть различные знаки пунктуации в их именах, такие как тире и апострофы. Они могут также иметь акцентированные или иностранные письма. Кроме того, число средних имен может сильно различаться.