2009-12-15 8 views
1

J'essaie de «valider» un champ de date. Je veux seulement permettre, caractères numériques et - caractère.Validation du champ de date de correspondance de Preg

$born_date=$_POST['date']; 
$goodchars = array("1","2","3","4","5","6","7","8","9","0","-"); 
$char_re_good = '/['.preg_quote(join('', $goodchars), '/').']/'; 
     if (!(preg_match($char_re_good, $born_date))) { 
      echo "not ok, contain INVALID chars" 
     }else{ 
      echo "ok, contain valid chars" 
     } 

Si j'essaie de chercher "1960" alors OK. Si j'essaie de chercher "asdfg" alors NON OK. Mais si je recherche "1960 /" alors la sortie est OK. Je ne comprends pas pourquoi.

Pourriez-vous m'aider à modifier pour vérifier si seuls les caractères "0-9" et "-" de l'utilisateur remplissent le champ.

Merci

Répondre

7

vous devez « ancrer » votre expression, à savoir insérer début de chaîne^et fin de la chaîne de marqueurs $.

preg_match('/^[0-9-]+$/', $born_date); 

Cependant, preg_match n'est pas un moyen de valider des dates. Par exemple, ce qui précède acceptera "99999999" etc

+0

+1 pour le mot « ancre », que je ne me souvenais – Yacoby

+0

je ne suis pas complètement sûr, mais ne Est-ce que vous devez mettre le ** - ** au début dans une classe de caractères ou l'échapper? – jeroen

+0

Stereofrog - fonctionne bien. Je vous remercie. Ce n'est pas une vraie validation. Je n'en ai pas besoin. Je veux juste savoir si les caractères valides sont remplis .. –

0
$char_re_good = "/^[0-9-]+$/"; 

que d'essayer Donnez-

5

user187291's regex ne correspondra que des caractères de date, ce qui est ce que vous voulez. Un moyen rapide pour valider une date est d'essayer de le convertir en un horodatage via strtotime():

if (strtotime($date_str)!==false) { 
    // The date is valid. 
} 
+0

Ceci est un formulaire de recherche simple. les utilisateurs peuvent frapper seulement 1960 sans jour et mois. je ne suis pas sûr, mais si je convertis 1960 avec strtotime, alors j'obtiens faux résultat.?! Je vais essayer. –