validation du champ de date preg_match
-
19-09-2019 - |
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
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