الطريقة الأولى:
عند العمل على مشروع، قد تواجه الحاجة إلى استخدام js للتحقق من صحة إدخال النموذج. في هذه الحالة، تحتاج إلى استخدام تعبيرات js العادية. على سبيل المثال: إذا كنت تريد التحقق من الشهر، يكون التنسيق هو: "yyyy-MM". هذا التعبير العادي سهل الكتابة للغاية، وإذا لم تتمكن حقًا من كتابته، فيمكنك أيضًا استخدام Google وBaidu هناك الكثير من الأمثلة على شبكة الإنترنت! ومع ذلك، إذا تمت كتابة التعبير العادي لـ js بهذه الطريقة، فسيؤدي ذلك أيضًا إلى ظهور مشكلات جديدة: ماذا لو تم تغيير تنسيق الشهر لملف التكوين؟ هل تريد تغييره إلى "yyyyMM" أو "yyyy_MM"...؟ ؟ هل علينا أن نتذكر تغيير التعبيرات العادية في JS مرارًا وتكرارًا؟ ؟
في هذا الوقت علينا أن نسأل: كيف يمكننا كتابة تعبيرات عادية ديناميكية بعد تعديل ملف التكوين، لم نعد بحاجة إلى لمس الكود؟
لقد بحث المؤلف في دليل js ولم يجد طريقة لتحويل السلسلة إلى تعبير عادي، ومع ذلك، يمكن حل هذه المشكلة بشكل غير مباشر باستخدام طريقة eval () لتنفيذ البرنامج النصي ديناميكيًا! وبالتالي كتابة كود أكثر تنوعا!
تم نشر الحل العام للمثال أعلاه أدناه:
انسخ رمز الكود كما يلي:
/**
* تحقق مما إذا كان إدخال نموذج الشهر قانونيًا
* النمط: سلسلة تنسيق الشهر
*المعرف: معرف النموذج
*/
وظيفة التحقق من صحة الشهر (النمط، المعرف) {
فار النص = document.getElementById(id);
فار MonthStr = text.value;
var SplitChar = "";
if(pattern.length > 6) SplitChar = Pattern.substring(4, Pattern.length - 2);
eval("var re = ///d{4}" + SplitChar + "//d{2}$/;");
//var re = //d{4}-/d{2}$/;
إذا (monthStr.match(re) == null) {
تنبيه("يرجى الرجوع إلى التنسيق [" + النمط + "] للإدخال!/n" + "eg /"2010" + SplitChar + "11/" أو /"2010" + SplitChar + "03/"");
text.value = "";
text.focus();
عودة كاذبة.
}
عودة صحيحة؛
}
انسخ رمز الكود كما يلي:
/**
* تحقق مما إذا كان إدخال نموذج الشهر قانونيًا
* النمط: سلسلة تنسيق الشهر
*المعرف: معرف النموذج
*/
وظيفة التحقق من صحة الشهر (النمط، المعرف) {
فار النص = document.getElementById(id);
فار MonthStr = text.value;
var SplitChar = "";
if(pattern.length > 6) SplitChar = Pattern.substring(4, Pattern.length - 2);
eval("var re = ///d{4}" + SplitChar + "//d{2}$/;");
//var re = //d{4}-/d{2}$/;
إذا (monthStr.match(re) == null) {
تنبيه("يرجى الرجوع إلى التنسيق [" + النمط + "] للإدخال!/n" + "eg /"2010" + SplitChar + "11/" أو /"2010" + SplitChar + "03/"");
text.value = "";
text.focus();
عودة كاذبة.
}
عودة صحيحة؛
}
هناك شيء واحد جدير بالملاحظة: عند تهجئة سلسلة نصية ديناميكيًا وتمريرها إلى طريقة eval() للتنفيذ، يجب تخطي الحرف '/'.
الطريقة الثانية:
انسخ رمز الكود كما يلي:
<النص البرمجي>
var n=new Array( ".htm ", ".html ", ".shtml ");
//var Pattern1 = new RegExp( "//w+// "+n[0]+ "$ ", "gi ");
فار s1= "b.shtml";
نتيجة فار = خطأ؛
ل(var i=0;i <n.length;i++)
{
Pattern1 = new RegExp( "//w+// "+n[i]+ "$ ", "gi ");
النتيجة|=pattern1.test(s1);
}
تنبيه(Boolean(نتيجة));
</script>