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

Поиск регулярного выражения для проверки правильного английского имени, то есть:

  • AZ, az, только 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'); ?> 

Related of "Регулярное выражение PHP для проверки английского имени"

Если правила, о которых вы заявили, на самом деле вы хотите, будут работать следующие:

 /^(?:[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. } 

Как отмечают другие, это позволит НЕТ пунктуации в названии!

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