مشکل در عبارت های منظم (تشخیص ایمیل)

foranyone

Well-Known Member
قبلا تو این انجمن یه بحثی شده بود راجع به تشخیص صحیح آدرس ایمیل :

کد:
reg =/^([a-za-z0-9_\-\.])+\@([a-za-z0-9_\-\.])+\.([a-za-z]{2,4})$/;
if(!reg.test(document.getElementById('email').value)){
message+='ایمیل را صحیح وارد نمائید';
message+=line;	
}

این کد یه ایرادی داره ، اونم اینه که اگه قبل از نام دامنه دو تا نقطه (یا بیشتر) وارد شه ایراد نمیگیره برای مثال :


لطفا راهنماییم کنین .:rose:
 

eAmin

Well-Known Member
سلام.

اینو حذف کن:
کد:
/^([a-za-z0-9_\-\.])+\@([a-za-z0-9_\-[COLOR="Red"]\.[/COLOR]])+\.([a-za-z]{2,4})$/;
درستش:
کد:
/^([A-Za-z0-9_\-\.])+@([A-Za-z0-9_\-])+\.([A-Za-z]{2,4})$/
علامت @ هم نیاز به escape کردن نداره، چون در جاوااسکریپت به عنوان متا کاراکتر شناخته شده نیست.
 
آخرین ویرایش:

foranyone

Well-Known Member
مرسی امین جان

میشه این تیکه رو بیشتر توضیح بدی ؟
علامت @ هم نیاز به escape کردن نداره، چون در جاوااسکریپت به عنوان متا کاراکتر شناخته شده نیست.
ممنون
 

eAmin

Well-Known Member
توی عبارات باقائده متاکاراکترهایی وجود داره که هرکدوم کار خاصی رو انجام می ده، مثلا w که هرچی کاراکتر در رشته هست رو مورد نظر قرار می ده و مخالفش هم W هست و یا d که هرچی شماره هست رو در نظر می گیره و D که مخالفش هست و ... که گفتنشون در اینجا مقدور نیست.

حالا ماباید برای اینکه متاکاراکتر w با حرف w در regex اشتباه گرفته نشه ما باید اینها رو escape کنیم با علامت: \ مثال: \w
کد:
var str = "foranyone";
if (/\w+/.test(str)) {
	// do somthings...
}
این مثال تمامی کاراکترهای موجود در رشته رو در نظر می گیره. و از همین رو چون @ متاکاراکتر در regex به حساب نمی یاد دیگه نیاز نیست که ما اون رو اسکیپ کنیم.
البته @ در php مبحث ش فرق می کنه که ...

در کل پیشنهاد می کنم، حتما بری سراغ regex چون قدرت باور نکردنی و نهفته در کارکردن با رشته ها داره، و اکثرا توی تمامی زبانها به یک صورت هست ( البته تقریبا ) و به عنوان یک استاندارد شناخته شده هست.
 

جدیدترین ارسال ها

بالا