تعبير منتظم لمطابقة التواريخ في تنسيق YYYY-MM-DD

StackOverflow https://stackoverflow.com/questions/1711727

  •  19-09-2019
  •  | 
  •  

سؤال

لدي تعبير منتظم في PHP الذي يبحث عن التاريخ بتنسيق YYYY-MM-DD

ما لدي هو: [\d]{4}-[\d]{2}-[\d]{2}

أنا أستخدم Preg_Match لاختبار التاريخ، المشكلة هي أن 2009-11-10 يعمل، ولكن 2009-11-1033434 يعمل كذلك. لقد كانت لحظة منذ أن قمت بإعادة ترجكس، كيف يمكنني التأكد من أنها تتوقف عند المكان الصحيح؟ لقد حاولت القيام به /([\d]{4}-[\d]{2}-[\d]{2}){1}/, ، لكنه يعود نفس النتيجة.

سيتم تقدير أي مساعدة إلى حد كبير.

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

المحلول

ما تحتاجه هو المراسيات، وتحديدا ^ و $. وبعد السابق يطابق بداية السلسلة، وهذا الأخير يطابق النهاية.

النقطة الأخرى التي سأجعلها هي [] غير ضرورية. \d يحتفظ بمعنىها خارج نطاقات الشخصية.

لذلك يجب أن تبدو Regex الخاصة بك مثل هذا: /^\d{4}-\d{2}-\d{2}$/.

نصائح أخرى

كيف تتوقع أن يتم إنهاء تاريخك؟

إذا كان نهاية الخط، ثم التالي $ يجب أن تفعل الخدعة.

إذا بواسطة حرف غير رقمي، ثم سلبية التالية تأكيد (?!\d) سوف تعمل بالمثل.

^20[0-2][0-9]-((0[1-9])|(1[0-2]))-([0-2][1-9]|3[0-1])$

أضفت تفحص إضافي قليلا للمساعدة في قضية MM و DD الحصول على مختلطة من قبل المستخدم. هذا لا يمسك جميع مخليات التاريخ، ولكنه يحتفظ YYYY جزء بين 2000 و 2029, ، ال MM ما بين 01 و 12 و ال DD ما بين 01 و 31

ربما ترغب في وضع المراسي على التعبير. بمعنى آخر

^[\d]{4}-[\d]{2}-[\d]{2}$

لاحظ علامة caret والدولار.

[\d]{4}-[\d]{2}-[\d]{2}?

حيث يعني علامة الاستفهام "غير الجشع"

ربما تريد البحث عن التأكيدات إلى الأمام (على افتراض أن محركك يدعمها، PHP / PREG / PCRE يفعل)

نتطلع إلى الأمام للتأكيدات (أو التأكيدات الإيجابية) تتيح لك أن تقول "وينبغي أن تتبعها X، ولكن X لا ينبغي أن يكون جزءا من المباراة). جرب بناء الجملة التالي

\d{4}-\d{2}-\d{2}(?=[^0-9])

التأكيد هو هذا الجزء

(?=[^0-9])

يقول "بعد Regex الخاص بي، لا يمكن أن يكون الحرف التالي عددا"

إذا لم يحصل ذلك على ما تريد / تحتاجه، فانشر مثالا على المدخلات الخاصة بك ورمز PHP الخاص بك لا يعمل. يمكن لهؤلاء العناصرين أنه مفيد بشكل كبير في تصحيح هذه الأنواع من المشاكل.

يمكنك محاولة وضع رمز "^ ^" و "$" في بداية ونهاية تعبيرك:

/^[\d]{4}-[\d]{2}-[\d]{2}$/

التي تتطابق مع البداية ونهاية السلسلة على التوالي.

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