Question

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

 $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 je tente de rechercher « 1960 » puis sur OK. Si je tente de rechercher « xdr », puis PAS OK. Mais si je recherche « 1960 / », puis la sortie est OK. Je ne comprends pas pourquoi.

Pourriez-vous me aider à vérifier si modifier pour l'utilisateur que « 0-9 » et « - ». Caractères remplir le champ

Merci

Était-ce utile?

La solution

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 est pas un moyen de valider les dates. Par exemple, ci-dessus acceptera "99999999" etc

Autres conseils

user187291 de regex correspondra les caractères de date seulement, 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.
}
$char_re_good = "/^[0-9-]+$/";

Donner qu'un essai

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top