SalmanAA

نوشته های سلمان عرب عامری

SalmanAA

نوشته های سلمان عرب عامری

۱ مطلب با کلمه‌ی کلیدی «regexp» ثبت شده است

اگر بخواهیم بدون استفاده از توابع پیچیده بررسی کنیم که تاریخ وارد شده توسط شخص در فرمت صحیح شمسی وارد شده است یا نه کافی است از عبارت با قاعده زیر استفاده کنیم:

/(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;
}