تایید اعتبار تاریخ شمسی در جاوا اسکریپت با استفاده از عبارات باقاعده
پنجشنبه, ۶ آذر ۱۳۹۳، ۰۹:۲۹ ق.ظ
اگر بخواهیم بدون استفاده از توابع پیچیده بررسی کنیم که تاریخ وارد شده توسط شخص در فرمت صحیح شمسی وارد شده است یا نه کافی است از عبارت با قاعده زیر استفاده کنیم:
/(13|14)([0-9][0-9])\/(((0?[1-6])\/((0?[1-9])|([12][0-9])|(3[0-1])))|(((0?[7-9])|(1[0-2]))\/((0?[1-9])|([12][0-9])|(30))))/
نمونه استفاده در جاوا اسکریپت:
var str = "1393/11/23";
//look for "1393/10/10"
var patt = /(13|14)([0-9][0-9])\/(((0?[1-6])\/((0?[1-9])|([12][0-9])|(3[0-1])))|(((0?[7-9])|(1[0-2]))\/((0?[1-9])|([12][0-9])|(30))))/g;
var result1 = patt.test(str);
console.log(result1);
str="1393/13/10";
var result2 = patt.test(str);
console.log(result2);
البته توجه کنید که در این عبارت یک مشکل وجود داره. اون هم اینکه سال کبیسه محاسبه نمی شه و برای اسفند همواره تا 30 رو قبول می کند. بنابراین باید یک کد اضافه هم بگذاریم که اگر تاریخ مورد قبول بود، با استخراج ماه و سال و روز اگر تاریخ طبق دستورات قبل معتبر بود و ماه 12 بود، و سال کبیسه آنگاه 30 روز قابل قبول باشد و در غیر اینصورت 29 روز قبول کند. بنابراین در ادامه کد زیر را می آوریم:
if (result1) {
var pos = str.indexOf('/');
var year = str.substring(0,pos);
var nextPos = str.indexOf('/',pos+1);
var month = str.substring(pos+1,nextPos);
var day = str.substring(nextPos+1);
if(month==12 && (year+1) % 4!=0 && day==30) { // kabise = 1379, 1383, 1387,... (year +1) divides on 4 remains 0
result = false;
}
کد کامل برنامه :
function checkShamsi(str) {
var patt = /(13|14)([0-9][0-9])\/(((0?[1-6])\/((0?[1-9])|([12][0-9])|(3[0-1])))|(((0?[7-9])|(1[0-2]))\/((0?[1-9])|([12][0-9])|(30))))/g;
var result = patt.test(str);
if (result) {
var pos = str.indexOf('/');
var year = str.substring(0,pos);
var nextPos = str.indexOf('/',pos+1);
var month = str.substring(pos+1,nextPos);
var day = str.substring(nextPos+1);
if(month==12 && (year+1) % 4!=0 && day==30) { // kabise = 1379, 1383, 1387,... (year +1) divides on 4 remains 0
result = false;
}
return result;
}
نحوه استفاده:
var myvalue="1393/12/30";
if (!checkShamsi(myvalue)) {
alert("تاریخ وارد شده معتبر نیست!");
return;
}
- پنجشنبه, ۶ آذر ۱۳۹۳، ۰۹:۲۹ ق.ظ
اگر فرصت کردین یه نگاه به کتابخانه momenjs بندازین. از تاریخ های فارسی هم پشتیبانی می کنه.