مصطفى اوريك نشر 20 مارس أرسل تقرير نشر 20 مارس إذا قمت بعملية Validate لهذا البريد الإلكتروني على سبيل المثال: 434user@gmail.com باستخدام هذا الـ Pattern: /(^[0-9].*)@(^[0-9]+.*)\.(\w{2,})/i يتم إرجاع قيمة true (أي أن هذا البريد الإلكتروني متوافق مع هذا الـ Pattern) بينما باستخدام هذا الـ Pattern: /(\D+.*)@(\D+.*)\.(\w{2,})/i يتم إرجاع قيمة false لماذا يحدث هذا ؟ 1 اقتباس
0 Chihab Hedidi نشر 20 مارس أرسل تقرير نشر 20 مارس بتاريخ 5 دقائق مضت قال مصطفى اوريك: @Chihab Hedidi أخطأت في سؤالي, ما أقصده حقا وباختصار هو أن هذا الكود يقوم بارجاع true ولا أعلم لماذا, علما أن \D يفترض أن يشير إلى جميع الأحرف إلى الأرقام let p = /(\D+.*)@(\D+.*)\.(\w{2,})/i; let email = "43ffdfsdf@gmail.com"; console.log(p.test(email)); // true (\D+.*) يتحقق لأنو القيمة تحتوي على حروف وليس شرط أن تكون الحروف في البداية، لكن إذا كنت تريد أن تضمن أنه لا يجب أن تكون الأرقام في البداية يمكنك تغييره هكذا: /^[^0-9].*@(\D+.*)\.(\w{2,})/i أو تضيف ^ في النمط الخاص بك لأن هذا الرمز يشير إلى البداية، أي بهذه الطريقة نضمن أن البداية تكون حرف: /^(\D+.*).*@(\D+.*)\.(\w{2,})/i اقتباس
0 Chihab Hedidi نشر 20 مارس أرسل تقرير نشر 20 مارس السبب في الاختلاف في النتائج بين النمطين هو الاختلاف في النمط الذي يتم تحديد البريد الإلكتروني به. النمط الأول يحتوي على هذا الجزء (^[0-9].*) و يعني أن النص يجب أن يبدأ برقم، لذلك يتطابق مع الأرقام فقط، و هذا ما يحتويه الإيمايل الذي وضعته لذلك يرجع لك true. بينما النمط الثاني يبدأ ب (\D+.*) و يعني أنه يتوقع أي حرف غير رقمي متبوعا بأي شيء (أي حرف غير رقمي متكرر)، لهذا يتم إرجاع قيمة false. يعني الفرق الرئيسي بين النمطين هو استخدام [0-9] في النمط الأول للتطابق مع الأرقام فقط، بينما يستخدم \D في النمط الثاني للتطابق مع أي حرف غير رقمي. و لفهم التعابير النمطية أكثر يمكنك الإطلاع على هذه المقالة التي ستساعدك بشكل أفضل: اقتباس
0 مصطفى اوريك نشر 20 مارس الكاتب أرسل تقرير نشر 20 مارس (معدل) @Chihab Hedidi أخطأت في سؤالي, ما أقصده حقا وباختصار هو أن هذا الكود يقوم بارجاع true ولا أعلم لماذا, علما أن \D يفترض أن يشير إلى جميع الأحرف إلا الأرقام let p = /(\D+.*)@(\D+.*)\.(\w{2,})/i; let email = "43ffdfsdf@gmail.com"; console.log(p.test(email)); // true تم التعديل في 20 مارس بواسطة مصطفى اوريك 1 اقتباس
0 Mustafa Suleiman نشر 20 مارس أرسل تقرير نشر 20 مارس فكر بالأمر على أنّ التعبير النمطي يبحث عن نمط معين بالسلسلة النصية، والنمط لديك موجود لذا يرجع True، لكن لماذا؟ لأن \D يشير إلى جميع الأحرف باستثناء الأرقام، لكنه يُستخدم مع المشغل +، مما يجعل الأمر مختلفًا. فتعبير \D+.* يبحث عن مجموعة واحدة أو أكثر من أي حرف باستثناء الأرقام، متبوعًا بأي عدد من الأحرف (.*). لذا، فهو يتطابق مع أي بريد إلكتروني يبدأ بأي حرف باستثناء رقم، ثم يتبعه أي عدد من الأحرف، ثم @، ثم أي حرف باستثناء رقم، ثم يتبعه أي عدد من الأحرف، ثم .، ثم أي حرفين على الأقل (لأن \w يطابق أي حرف أو رقم أو سطر سفلي). في email، يتطابق التعبير مع "43ffdfsdf" (الحرف الأول ليس رقمًا، ثم يتبعه أي عدد من الأحرف) و "gmail" (أي حرف باستثناء رقم، ثم يتبعه أي عدد من الأحرف) و "com" (حرفين على الأقل). بالتالي، فإن p.test(email) يُرجع true لأن التعبير \D+.* يطابق البريد الإلكتروني "43ffdfsdf@gmail.com". من الأفضل استخدام regex101.com لإختبار النمط، أدخل التعبير \D+.* وقم بتجربته مع مختلف عناوين البريد الإلكتروني. وفي حال تريد التأكد من أن البريد الإلكتروني لا يبدأ برقم، فنستخدم التعبير التالي: let p = /^[^0-9].*@\S+\.\w{2,}$/i; وهو يتطابق مع أي بريد إلكتروني، يتصف بالتالي: لا يبدأ برقم (^[^0-9]) يحتوي على @ لا يحتوي على مسافات بيضاء (/\S+/) ينتهي بـ . وحرفين على الأقل (\w{2,}) لذا النمط التالي سيرجع نتيجة Flase: let p = /^[^0-9].*@\S+\.\w{2,}$/i; let email = "43ffdfsdf@gmail.com"; console.log(p.test(email)); // false 1 اقتباس
السؤال
مصطفى اوريك
إذا قمت بعملية Validate لهذا البريد الإلكتروني على سبيل المثال: 434user@gmail.com
باستخدام هذا الـ Pattern:
يتم إرجاع قيمة true (أي أن هذا البريد الإلكتروني متوافق مع هذا الـ Pattern)
بينما باستخدام هذا الـ Pattern:
يتم إرجاع قيمة false
لماذا يحدث هذا ؟
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.