Essayez ceci:
/^(([A-Za-z]+[\-\']?)*([A-Za-z]+)?\s)+([A-Za-z]+[\-\']?)*([A-Za-z]+)?$/
Il attend en option [au moins 1 caractère alphabétique suivi d'un 'ou -] un nombre indéfini de fois. Il doit y avoir au moins un caractère alphabétique devant un espace requis pour s'assurer que nous obtenons au moins le prénom et le nom. Tout ce schéma est groupé pour accepter une répétition indéfinie (pour les personnes qui aiment utiliser tous leurs noms, comme John Jacob Jingleheimer Schmidt), mais doit apparaître au moins une fois, au moyen du signe + au milieu. Enfin, le nom de famille est traité de la même manière que les autres noms, mais aucun espace de fin n'est autorisé. (Malheureusement, cela signifie que nous enfreignons SECHE un peu.)
Voici le résultat sur plusieurs pièces possibles de l'entrée:
"Jon Doe": true
"Jonathan Taylor Thomas": true
"Julia Louis-Dreyfus": true
"Jean-Paul Sartre": true
"Pat O'Brien": true
"Þór Eldon": false
"Marcus Wells-O'Shaugnessy": true
"Stephen Wells-O'Shaugnessy Marcus": true
"This-Is-A-Crazy-Name Jones": true
"---- --------": false
"'''' ''''''''": false
"'-'- -'-'-'-'": false
"a-'- b'-'-'-'": false
"'-'c -'-'-'-d": false
"e-'f g'-'-'-h": false
"'ij- -klmnop'": false
Notez qu'il ne gère pas encore les caractères Unicode, mais il pourrait peut-être élargi pour inclure ceux si nécessaire.
Qu'en est-il de "James T. Kirk"? –