2016-10-13 4 views
0

Meine Antwort ist fast wie diese: Pregmatch for at least 3 letters and for minus and apostropheregex und Apostroph

Also, ich brauche auch einen regulären Ausdruck für einen Namen Validierung. Aber meine Regeln sind ein wenig anders:

  • muss mit einem Buchstaben beginnen;
  • keine Nummern und keine alphanumerische;
  • müssen mindestens drei Buchstaben haben (auch nicht nur aufeinanderfolgende ... anywere im Namen) und max 20;
  • kann nur einen Apostroph (') oder keinen anderen akzeptieren - dies sind die einzigen Sonderzeichen, die verwendet werden können ... (nicht obligatorisch und anywere im Namen). es Dinge tat, wo Sie die Apostroph setzen

    für ex:

    d'Amico => Kauf genommen werden muß;
    d'Amico '=> keine d'Amico => keine ‚oneil => kein dell'amore => ja damico => ja king kong => ja io => keine io9 => nein
    8888 => nein aaa +++? => Kein

Bis jetzt habe ich diesen Code:

<?php 
... 
    // Array errori 
    $error = array(); // o $error = []; se hai una versione di php recente 

    // Controllo il Nome Utente 
    if(trim($nome) == ''){ 
     $error[] = 'Campo nome non compilato'; } 

    if (ctype_alnum($nome)) 
     {$error[] = 'Se vuoi modificare il campo nome, assicurati che lo 
      stesso non contenga numeri al suo interno!'; } 

    if(strlen($nome) < 3 || strlen($nome) > 20){ 
     $error[] = 'Il campo nome deve contenere minimo 3 caratteri e massimo 20 caratteri'; } 

    if (!preg_match("/^([A-Za-z|àèéìòù][A-Za-z'-]*?){3,}$/", $nome)) { 
     $error[] = 'Il campo nome contiene caratteri non ammessi'; } 

... 

?> 

<html>... 

<?php 
     if(!empty($error)){ 
     echo '<center>'; 
     echo implode('<br/>', $error); 
     echo '</center>'; 
     } 
    ?> 

... 
</html> 

Wie kann ich alles in einen String kombinieren? Vielen Dank im Voraus!

+0

Ich bin neugierig: Warum eine solche starre Validierung gegen Name jemand? Es ist verständlich für Dinge wie E-Mails und Telefonnummern, aber wenn es um Namen und all die verschiedenen Kulturen geht, die unterschiedliche Regeln haben, wäre es nicht sinnvoller, nur bestimmte Zeichen zu akzeptieren? – maiorano84

+0

@ maiorano84 einfach, um die manuelle Arbeit zu rationalisieren, die auftritt, nachdem sich ein Benutzer am Formular anmeldet. Es gibt keinen Rassismus gegenüber dem Namen von jemandem ... :) aber wenn Sie irgendeinen Vorschlag haben, nehme ich es gerne an. – Chuby

+0

Persönlich? Ich würde es nur auf Buchstaben, Leerzeichen, Bindestriche und Apostrophen beschränken. Ich würde mich nicht zu sehr mit Benutzern beschäftigen, die etwas wie "m''gorpkplzik" machen. Nach allem, was ich weiß, haben sich die Eltern vielleicht dazu entschlossen, sie zu benennen, indem sie eine Tastatur über eine Treppe werfen. Ich denke, dass dem Benutzer ein gewisses Vertrauen entgegengebracht werden muss, um gültige Informationen einzugeben. Ich würde etwas vorschlagen wie: '/^(?.*[a-z]{3})[a-z0-9\- \ 'àèéìòù] + $/i'. Das wird zumindest sicherstellen, dass Sie 3 aufeinanderfolgende Buchstaben haben. – maiorano84

Antwort

0

Mit einem negativen Lookahead können Sie feststellen, dass die Zeichenfolge nicht mit ', Leerzeichen oder 2 (oder mehr) einfache Anführungszeichen beginnt. Dann können Sie einfach testen, ob die Zeichenkette zwischen 3 und 20 Zeichen lang ist mit Ihrer erlaubten Zeichenliste.

(?!(.*?'.*?'|^[' ]))^[A-Za-z|àèéìòù ']{3,20}$ 

Regex Demo: https://regex101.com/r/QANVBo/1

PHP Demo: https://eval.in/659769

PHP Verbrauch:

$array = array("d'amico", "dell'amore", "damico", "king kong", "io", "io9", "8888", "aaa+++?", "d'amico'", "d''amico", "'oneil"); 
foreach ($array as $term) { 
    if(preg_match("/(?!(.*?'.*?'|^[' ]))^[A-Za-z|àèéìòù ']{3,20}$/", $term)) { 
      echo 'Matches:'; 
    } else { 
      echo 'No Match:'; 
    } 
    echo $term . "\n"; 
} 
+0

if (! Preg_match ("/(?! (. *? '. *?' |^[']))^[A-Za-z | àèèìòù'] {3,20} $/i ", $ nome)) {$ error [] = 'Inserisci un nome valido! ';} es funktioniert nicht mit Apostroph e Leerzeichen ... so der Name d'amico zeigt Fehler !!! Wie auch immer, danke, also pass auf! – Chuby

+0

Können Sie die 'eval.in' aktualisieren, um den Namen anzuzeigen, den Sie verwenden? Ich bin mir auch nicht sicher, warum das '|' in deiner ursprünglichen Zeichenklasse war, aber ich habe das hier gelassen, könnte ein Problem sein (deine Beschreibung hat es nie erwähnt). – chris85

+0

könnte es falsch sein mein Array? Ich verstehe nicht, warum es nicht funktioniert !! Ich habe den ganzen Tag darin verbracht. – Chuby