2010-08-02 6 views
0

j'ai en ce moment pour ce nom complet:PHP: la validation du formulaire « Nom complet »

if(empty($_POST['full_name']) || strlen($_POST['full_name']) < 4) 
{ 
$errormessage[] = "ERROR.\n"; 
} 

Comment puis-je faire une validation pour nom complet, de sorte que le nom entré doit contenir l'espace?

Donc, comme si la personne entrer:

John Andersson

Son ok, mais s'il entrer:

JohnAndersson

ce ne est pas ok, erreur . Donc vous auriez besoin d'un "espace" dans votre nom complet.

+2

Je ne pense pas que ce soit sage. La convention selon laquelle le prénom et le nom sont séparés par un caractère espace ne s'applique pas à toutes les langues du monde. –

+0

c'est pour une communauté dans ma ville locale – Karem

Répondre

2

Comme ceci:

if (strpos(trim($_POST['full_name']), ' ') !== false){ 
    // user has specified first and last name 
} 
elseif (strpos(trim($_POST['full_name']), ' ') !== true){ 
    // user has specified a single name 
} 

Vous devez saisir la fonction trim pour vérifier les mauvais noms tels que:

  • Justin Alba[space]
  • [space]Justin Alba
  • Justin[space]
  • [space]Justin
+0

Ça ne marchera pas. Un utilisateur peut tromper le serveur en tapant un espace après son nom complet à un seul mot (ce qui d'ailleurs est assez commun en tapant). – Anax

+0

@Anax: Bon point pour downvote mais voir ma réponse mise à jour. – Sarfraz

+0

Ok, mais le simple 'John' ne contient aucun caractère d'espace et c'est alors' false'. – hsz

0

Vous pouvez faire un test comme:

$fullName = 'JohnAndersson'; 

if (ucfirst(strtolower($fullName)) != ucfirst($fullName)) { 
    echo 'It is not valid'; 
} 

ucfirst(strtolower($fullName)) vous permet de convertir votre chaîne à Johnandersson et il n'est pas égale à JohnAndersson il devrait contenir un espace.

+0

Et si l'utilisateur entre 'Johnandersson'? Votre solution ne fonctionne pas. – Anax

+1

Comment reconnaître que ce n'est pas juste un nom de werid? – hsz

+0

+1, c'est en fait plus à l'épreuve des balles (dans la mesure du possible) que la solution acceptée. –

1

Vous pouvez éventuellement avoir deux champs, un pour le prénom et un pour le nom de famille. Je suppose que vous ne voulez pas que les gens avec un nom remplissent votre formulaire afin d'exclure Bono, Eminem, Prince, Sting, Bjork, Enya et quelques autres.

+1

J'ai pensé au même argument, mais ensuite, ces gens ont tous des prénoms et des noms comme tout le monde qu'ils utiliseraient lors de leur inscription. Pourtant, je suis d'accord qu'insister sur un espace n'est pas une bonne idée. –

+0

Oui, je suppose que les célébrités artificiellement nommées devraient utiliser leurs noms complets dans des contextes juridiques. Je viens d'être distrait pendant quelques minutes à la recherche de cultures qui n'ont qu'un seul nom. –

1

Ce que vous pourriez faire est de diviser la chaîne puis de vérifier puis séparer les parties de la chaîne.

$nameSplit = explode(' ', $name); 

if(count($nameSplit) < 2) 
{ 

//Only one name given 

} 
else 
{ 

    $firstName = trim($nameSplit[0]); 
    $secondName = trim($nameSplit[1]); 

    if($secondName == '') 
    { 

    //No second name given 

    } 

} 
Questions connexes