سؤال

أحاول "التحقق من صحة" حقل التاريخ. أريد فقط السماح والأحرف الرقمية والشخصية.

 $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"
       }

إذا حاولت البحث عن "1960" ثم موافق. إذا حاولت البحث عن "ASDFG"، فلا "غير موافق". ولكن إذا بحثت عن "1960 /"، فإن الإخراج على ما يرام. أنا لا أفهم لماذا.

هل يمكنك مساعدتي في تعديل للتحقق مما إذا كان المستخدم فقط "0-9" و "-" chars املأ الحقل.

شكرا لك

هل كانت مفيدة؟

المحلول

تحتاج إلى "مرساة" تعبيرك، أي إدراج بداية السلسلة ^ ونهاية علامات سلسلة $.

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

ومع ذلك، preg_match ليست طريقة للتحقق من صحة التواريخ. على سبيل المثال، سيقبل أعلاه "99999999" إلخ

نصائح أخرى

User187291's Regex. سوف تطابق أحرف التاريخ فقط، وهو ما تريد. طريقة سريعة للتحقق من صحة التاريخ هي محاولة تحويلها إلى Timestamp عبر strtotime():

if (strtotime($date_str)!==false) {
  // The date is valid.
}
$char_re_good = "/^[0-9-]+$/";

إعطاء هذا المحاولة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top