2011-09-12 19 views
16

क्या जावास्क्रिप्ट में रेगेक्स होने का कोई तरीका है जो कई प्रारूपों की तिथियों को मान्य करता है, जैसे: डीडी-एमएम-वाई वाई वाई या डीडी.एमएम.वायवाईवाई या डीडी/एमएम/वाई वाई वाईवाई आदि? मुझे इन सभी को एक रेगेक्स में चाहिए और मैं इसके साथ वास्तव में अच्छा नहीं हूं। अब तक मैं इस के साथ आया हूं: var dateReg = /^\d{2}-\d{2}-\d{4}$/; डीडी-एमएम-वाई वाई वाई वाई के लिए। मुझे केवल डेट प्रारूप को सत्यापित करने की आवश्यकता है, तारीख को ही नहीं। कोष्ठक कीजावास्क्रिप्ट - दिनांक प्रारूप को सत्यापित करने के लिए रेगेक्स

+1

केवल बात यह है कि भिन्न होता है विभाजक है आप http://www.datejs.com/ –

+0

में रुचि हो सकती फिर '-\ - \/\।] '(या जो भी बच निकलेगा) के साथ' -' को प्रतिस्थापित करें। –

+0

यह आपकी खुद की कस्टम प्रारूप दिनांक स्ट्रिंग है। अंतर्राष्ट्रीय प्रारूप है: dd.mm.yyyy या मिमी/डीडी/yyyy या yyyy-mm-dd। –

उत्तर

20

आप एक चरित्र वर्ग ([./-]) इस्तेमाल कर सकते हैं ताकि seperators परिभाषित पात्रों में से कोई भी हो सकता

var dateReg = /^\d{2}[./-]\d{2}[./-]\d{4}$/ 

या बेहतर अभी भी, पहले सेपरेटर के लिए वर्ण वर्ग से मेल करें, फिर उसे एजी के रूप में कैप्चर करें roup ([./-]) और कब्जा कर लिया समूह \1 के लिए एक संदर्भ का उपयोग दूसरे विभाजक मिलान करने के लिए है, जो कि दोनों seperators ही कर रहे हैं यह सुनिश्चित करना होगा:

var dateReg = /^\d{2}([./-])\d{2}\1\d{4}$/ 

"22-03-1981".match(dateReg) // matches 
"22.03-1981".match(dateReg) // does not match 
"22.03.1981".match(dateReg) // matches 
+1

धन्यवाद का एक संक्षिप्त संस्करण दिया है। स्लैश के अलावा "/" ठीक से बच नहीं रहा है, यह ठीक काम करता है। –

+0

मुझे नहीं लगता कि स्लैश को एक चरित्र वर्ग के अंदर से बचने की जरूरत है, लेकिन यदि आप चाहें तो इसे से बचने में कोई हानि नहीं है। हो सकता है कि आपके टेक्स्ट एडिटर में सिंटैक्स हाइलाइटिंग बेहतर काम करे, लेकिन किसी भी तरह से काम करना चाहिए। –

+0

क्या आप पहले नंबर (महीने) के लिए '3' से अधिक नहीं होने के लिए सीमा जोड़ सकते हैं? – vsync

0

इस प्रयास करें:

^\d\d[./-]\d\d[./-]\d\d\d\d$ 
8

सुझाव regex तिथि, केवल पैटर्न को मान्य नहीं होंगे।

तो 99.99.9 999 रेगेक्स पास करेगा।

आप बाद में निर्दिष्ट है कि आप केवल पैटर्न को मान्य करने की जरूरत है लेकिन मैं अभी भी लगता है कि यह अधिक उपयोगी है एक तारीख वस्तु

function isDate(str) {  
 
    var parms = str.split(/[\.\-\/]/); 
 
    var yyyy = parseInt(parms[2],10); 
 
    var mm = parseInt(parms[1],10); 
 
    var dd = parseInt(parms[0],10); 
 
    var date = new Date(yyyy,mm-1,dd,0,0,0,0); 
 
    return mm === (date.getMonth()+1) && dd === date.getDate() && yyyy === date.getFullYear(); 
 
} 
 
var dates = [ 
 
    "13-09-2011", 
 
    "13.09.2011", 
 
    "13/09/2011", 
 
    "08-08-1991", 
 
    "29/02/2011" 
 
] 
 

 
for (var i=0;i<dates.length;i++) { 
 
    console.log(dates[i]+':'+isDate(dates[i])); 
 
}

+0

अमान्य दिनांक मानों का सत्यापन करने का प्रयास करें मैन्युअल रूप से मेरे द्वारा किया गया। अगर मैं आपके समाधान के साथ 08-08-1991 की तरह कुछ दर्ज करता हूं, तो मुझे किसी कारण से जावास्क्रिप्ट में "अमान्य तिथि" मिल जाएगी। –

+1

एफएक्स में नहीं: मैंने उस तारीख को http://jsfiddle.net/mplungjan/Mqh8D/ पर जोड़ा है आप कौन से ब्राउज़र हैं? – mplungjan

+0

यदि आप parseInt का उपयोग करते हैं तो आपको 08 और 09 के बाद से रेडिक्स 10 का उपयोग करना अमान्य ऑक्टल नंबर – mplungjan

0

पहिया नहीं है फिर से आविष्कार बनाने के लिए। , दिन, महीने और साल की तरह http://www.datejs.com/

+3

है क्योंकि मैं बाहरी पुस्तकालय जोड़ना नहीं चाहता हूं, यह आवश्यक नहीं है, यह केवल साइट लोड धीमा कर देगा। लेकिन हाँ, यह एक समाधान होगा –

14

स्वरूप, पार्स करने दिनांकों पहले से बने समाधान का उपयोग करें:

var regex = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$/;

+0

यह आंशिक रूप से तारीख को मान्य करता है, लेकिन अभी भी '30-02-2013' जैसी तिथियों की अनुमति देता है जो अमान्य है। विभिन्न महीने की लंबाई के लिए खाते के लिए अधिक जटिल नियमों की आवश्यकता है। –

+2

तकनीकी रूप से @ बिलीमून बोलते हुए, हम वास्तव में अपने प्रारूप को मान्य कर रहे हैं, तारीख ही नहीं। आपकी 30-02-2013 जैसी तिथियां भी मेरे दोस्त की अनुमति देती हैं। – nicoabie

+0

हां, मेरा सत्यापन वैध तिथियों से संख्या निकालने के लिए डिज़ाइन किया गया है, और यह सत्यापन करने का प्रयास नहीं करता है, जो आपका करता है।मुझे लगता है कि कुछ समायोजन के साथ, आप तिथियों का उचित सत्यापन कर सकते हैं, जिसे मैं आपको देखना चाहता हूं, लेकिन उन्हें आधा मान्य करने के लिए मुझे लगता है कि चट्टान किनारे पर कमजोर बाड़ होने की तरह, कोई भी बेहतर नहीं है, ताकि कोई दुबला न हो इस पर! एक मजबूत अभी भी बेहतर है। –

0

@mplungjan, @ एडवर्ड-लुका

function isDate(str) {  
    var parms = str.split(/[\.\-\/]/); 
    var yyyy = parseInt(parms[2],10); 
    var mm = parseInt(parms[1],10); 
    var dd = parseInt(parms[0],10); 
    var date = new Date(yyyy,mm-1,dd,12,0,0,0); 
    return mm === (date.getMonth()+1) && 
     dd === date.getDate() && 
     yyyy === date.getFullYear(); 
} 

नई तारीख () स्थानीय समय का उपयोग करता है, घंटे 00:00:00 आखिरी दिन दिखाएगा जब हमारे पास "ग्रीष्मकालीन समय" या "डीएसटी (डेलाइट सेविंग टाइम)" घटनाएं होंगी।

उदाहरण:

new Date(2010,9,17) 
Sat Oct 16 2010 23:00:00 GMT-0300 (BRT) 

एक अन्य विकल्प getUTCDate उपयोग करने के लिए है()।

4

आप OR (|) ऑपरेटर के उपयोग के साथ नियमित एकाधिक अभिव्यक्तियों का उपयोग कर सकते हैं।

function validateDate(date){ 
    var regex=new RegExp("([0-9]{4}[-](0[1-9]|1[0-2])[-]([0-2]{1}[0-9]{1}|3[0-1]{1})|([0-2]{1}[0-9]{1}|3[0-1]{1})[-](0[1-9]|1[0-2])[-][0-9]{4})"); 
    var dateOk=regex.test(date); 
    if(dateOk){ 
     alert("Ok"); 
    }else{ 
     alert("not Ok"); 
    } 
} 

समारोह से ऊपर YYYY-MM-DD, डीडी-MM-YYYY तिथि प्रारूप मान्य कर सकते हैं। आप किसी भी दिनांक प्रारूप को सत्यापित करने के लिए नियमित अभिव्यक्ति का विस्तार कर सकते हैं। मान लें कि आप YYYY/MM/DD को सत्यापित करना चाहते हैं, बस "[-]" को "[- | /]" से प्रतिस्थापित करें। यह अभिव्यक्ति 31, महीनों से 12 तक की तारीखों को मान्य कर सकती है लेकिन 30 दिनों के साथ छलांग वर्ष और महीनों का अंत मान्य नहीं है।

0

यह सुनिश्चित करने के लिए कि यह काम करेगा, आपको इसे सत्यापित करने की आवश्यकता है।

function mmIsDate(str) { 

    if (str == undefined) { return false; } 

    var parms = str.split(/[\.\-\/]/); 

    var yyyy = parseInt(parms[2], 10); 

    if (yyyy < 1900) { return false; } 

    var mm = parseInt(parms[1], 10); 
    if (mm < 1 || mm > 12) { return false; } 

    var dd = parseInt(parms[0], 10); 
    if (dd < 1 || dd > 31) { return false; } 

    var dateCheck = new Date(yyyy, mm - 1, dd); 
    return (dateCheck.getDate() === dd && (dateCheck.getMonth() === mm - 1) && dateCheck.getFullYear() === yyyy); 

}; 
0

आप तुलना यह आप के लिए उपयोग भरा होगा के साथ अपने date(YYYY-MM-DD) मान्य करने के लिए चाहते हैं ...

function validateDate() 
    { 
    var newDate = new Date(); 
    var presentDate = newDate.getDate(); 
    var presentMonth = newDate.getMonth(); 
    var presentYear = newDate.getFullYear(); 
    var dateOfBirthVal = document.forms[0].dateOfBirth.value; 
    if (dateOfBirthVal == null) 
    return false; 
    var validatePattern = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/; 
    dateValues = dateOfBirthVal.match(validatePattern); 
    if (dateValues == null) 
    { 
     alert("Date of birth should be null and it should in the format of yyyy-mm-dd") 
    return false; 
     } 
    var birthYear = dateValues[1];   
    birthMonth = dateValues[3]; 
    birthDate= dateValues[5]; 
    if ((birthMonth < 1) || (birthMonth > 12)) 
    { 
     alert("Invalid date") 
    return false; 
     } 
    else if ((birthDate < 1) || (birthDate> 31)) 
    { 
     alert("Invalid date") 
    return false; 
     } 
    else if ((birthMonth==4 || birthMonth==6 || birthMonth==9 || birthMonth==11) && birthDate ==31) 
    { 
     alert("Invalid date") 
    return false; 
     } 
    else if (birthMonth == 2){ 
    var isleap = (birthYear % 4 == 0 && (birthYear % 100 != 0 || birthYear % 400 == 0)); 
    if (birthDate> 29 || (birthDate ==29 && !isleap)) 
    { 
     alert("Invalid date") 
    return false; 
     } 
    } 
    else if((birthYear>presentYear)||(birthYear+70<presentYear)) 
     { 
     alert("Invalid date") 
     return false; 
     } 
    else if(birthYear==presentYear) 
     { 
     if(birthMonth>presentMonth+1) 
      { 
      alert("Invalid date") 
      return false; 
      } 
     else if(birthMonth==presentMonth+1) 
      { 
      if(birthDate>presentDate) 
       { 
       alert("Invalid date") 
       return false; 
       } 
      } 
     } 
return true; 
    } 
0

कृपया नीचे दिए गए कोड जो तारीख सत्यापन प्रदर्शन करने के लिए सक्षम बनाता है में मिल प्रारंभिक/से और अंत/तारीखों को सत्यापित करने के लिए किसी भी आपूर्ति प्रारूप के लिए या उपयोगकर्ता लोकेल के आधार पर। कुछ बेहतर दृष्टिकोण हो सकते हैं लेकिन इसके साथ आ गए हैं। इसे प्रारूपों के लिए परीक्षण किया है: एमएम/डीडी/वाईय, डीडी/एमएम/वाई, वाई वाई-एमएम-डीडी, yyyy.MM.dd, yyyy/MM/dd और dd-MM-yyyy।

नोट दिनांक प्रारूप और तारीख स्ट्रिंग हाथ में हाथ की आपूर्ति की जाती है।

<script type="text/javascript"> 
function validate(format) { 

    if(isAfterCurrentDate(document.getElementById('start').value, format)) { 
     alert('Date is after the current date.'); 
    } else { 
     alert('Date is not after the current date.'); 
    } 
    if(isBeforeCurrentDate(document.getElementById('start').value, format)) { 
     alert('Date is before current date.'); 
    } else { 
     alert('Date is not before current date.'); 
    } 
    if(isCurrentDate(document.getElementById('start').value, format)) { 
     alert('Date is current date.'); 
    } else { 
     alert('Date is not a current date.'); 
    } 
    if (isBefore(document.getElementById('start').value, document.getElementById('end').value, format)) { 
     alert('Start/Effective Date cannot be greater than End/Expiration Date'); 
    } else { 
     alert('Valid dates...'); 
    } 
    if (isAfter(document.getElementById('start').value, document.getElementById('end').value, format)) { 
     alert('End/Expiration Date cannot be less than Start/Effective Date'); 
    } else { 
     alert('Valid dates...'); 
    } 
    if (isEquals(document.getElementById('start').value, document.getElementById('end').value, format)) { 
     alert('Dates are equals...'); 
    } else { 
     alert('Dates are not equals...'); 
    } 
    if (isDate(document.getElementById('start').value, format)) { 
     alert('Is valid date...'); 
    } else { 
     alert('Is invalid date...'); 
    } 
} 

/** 
* This method gets the year index from the supplied format 
*/ 
function getYearIndex(format) { 

    var tokens = splitDateFormat(format); 

    if (tokens[0] === 'YYYY' 
      || tokens[0] === 'yyyy') { 
     return 0; 
    } else if (tokens[1]=== 'YYYY' 
      || tokens[1] === 'yyyy') { 
     return 1; 
    } else if (tokens[2] === 'YYYY' 
      || tokens[2] === 'yyyy') { 
     return 2; 
    } 
    // Returning the default value as -1 
    return -1; 
} 

/** 
* This method returns the year string located at the supplied index 
*/ 
function getYear(date, index) { 

    var tokens = splitDateFormat(date); 
    return tokens[index]; 
} 

/** 
* This method gets the month index from the supplied format 
*/ 
function getMonthIndex(format) { 

    var tokens = splitDateFormat(format); 

    if (tokens[0] === 'MM' 
      || tokens[0] === 'mm') { 
     return 0; 
    } else if (tokens[1] === 'MM' 
      || tokens[1] === 'mm') { 
     return 1; 
    } else if (tokens[2] === 'MM' 
      || tokens[2] === 'mm') { 
     return 2; 
    } 
    // Returning the default value as -1 
    return -1; 
} 

/** 
* This method returns the month string located at the supplied index 
*/ 
function getMonth(date, index) { 

    var tokens = splitDateFormat(date); 
    return tokens[index]; 
} 

/** 
* This method gets the date index from the supplied format 
*/ 
function getDateIndex(format) { 

    var tokens = splitDateFormat(format); 

    if (tokens[0] === 'DD' 
      || tokens[0] === 'dd') { 
     return 0; 
    } else if (tokens[1] === 'DD' 
      || tokens[1] === 'dd') { 
     return 1; 
    } else if (tokens[2] === 'DD' 
      || tokens[2] === 'dd') { 
     return 2; 
    } 
    // Returning the default value as -1 
    return -1; 
} 

/** 
* This method returns the date string located at the supplied index 
*/ 
function getDate(date, index) { 

    var tokens = splitDateFormat(date); 
    return tokens[index]; 
} 

/** 
* This method returns true if date1 is before date2 else return false 
*/ 
function isBefore(date1, date2, format) { 
    // Validating if date1 date is greater than the date2 date 
    if (new Date(getYear(date1, getYearIndex(format)), 
      getMonth(date1, getMonthIndex(format)) - 1, 
      getDate(date1, getDateIndex(format))).getTime() 
     > new Date(getYear(date2, getYearIndex(format)), 
      getMonth(date2, getMonthIndex(format)) - 1, 
      getDate(date2, getDateIndex(format))).getTime()) { 
     return true; 
    } 
    return false;     
} 

/** 
* This method returns true if date1 is after date2 else return false 
*/ 
function isAfter(date1, date2, format) { 
    // Validating if date2 date is less than the date1 date 
    if (new Date(getYear(date2, getYearIndex(format)), 
      getMonth(date2, getMonthIndex(format)) - 1, 
      getDate(date2, getDateIndex(format))).getTime() 
     < new Date(getYear(date1, getYearIndex(format)), 
      getMonth(date1, getMonthIndex(format)) - 1, 
      getDate(date1, getDateIndex(format))).getTime() 
     ) { 
     return true; 
    } 
    return false;     
} 

/** 
* This method returns true if date1 is equals to date2 else return false 
*/ 
function isEquals(date1, date2, format) { 
    // Validating if date1 date is equals to the date2 date 
    if (new Date(getYear(date1, getYearIndex(format)), 
      getMonth(date1, getMonthIndex(format)) - 1, 
      getDate(date1, getDateIndex(format))).getTime() 
     === new Date(getYear(date2, getYearIndex(format)), 
      getMonth(date2, getMonthIndex(format)) - 1, 
      getDate(date2, getDateIndex(format))).getTime()) { 
     return true; 
    } 
    return false; 
} 

/** 
* This method validates and returns true if the supplied date is 
* equals to the current date. 
*/ 
function isCurrentDate(date, format) { 
    // Validating if the supplied date is the current date 
    if (new Date(getYear(date, getYearIndex(format)), 
      getMonth(date, getMonthIndex(format)) - 1, 
      getDate(date, getDateIndex(format))).getTime() 
     === new Date(new Date().getFullYear(), 
       new Date().getMonth(), 
       new Date().getDate()).getTime()) { 
     return true; 
    } 
    return false;     
} 

/** 
* This method validates and returns true if the supplied date value 
* is before the current date. 
*/ 
function isBeforeCurrentDate(date, format) { 
    // Validating if the supplied date is before the current date 
    if (new Date(getYear(date, getYearIndex(format)), 
      getMonth(date, getMonthIndex(format)) - 1, 
      getDate(date, getDateIndex(format))).getTime() 
     < new Date(new Date().getFullYear(), 
       new Date().getMonth(), 
       new Date().getDate()).getTime()) { 
     return true; 
    } 
    return false;     
} 

/** 
* This method validates and returns true if the supplied date value 
* is after the current date. 
*/ 
function isAfterCurrentDate(date, format) { 
    // Validating if the supplied date is before the current date 
    if (new Date(getYear(date, getYearIndex(format)), 
      getMonth(date, getMonthIndex(format)) - 1, 
      getDate(date, getDateIndex(format))).getTime() 
     > new Date(new Date().getFullYear(), 
       new Date().getMonth(), 
       new Date().getDate()).getTime()) { 
     return true; 
    } 
    return false;     
} 

/** 
* This method splits the supplied date OR format based 
* on non alpha numeric characters in the supplied string. 
*/ 
function splitDateFormat(dateFormat) { 
    // Spliting the supplied string based on non characters 
    return dateFormat.split(/\W/); 
} 

/* 
* This method validates if the supplied value is a valid date. 
*/ 
function isDate(date, format) {     
    // Validating if the supplied date string is valid and not a NaN (Not a Number) 
    if (!isNaN(new Date(getYear(date, getYearIndex(format)), 
      getMonth(date, getMonthIndex(format)) - 1, 
      getDate(date, getDateIndex(format))))) {      
     return true; 
    } 
    return false;          
} 

नीचे HTML स्निपेट

है
<input type="text" name="start" id="start" size="10" value="05/31/2016" /> 
    <br/> 
    <input type="text" name="end" id="end" size="10" value="04/28/2016" /> 
    <br/> 
    <input type="button" value="Submit" onclick="javascript:validate('MM/dd/yyyy');" /> 
संबंधित मुद्दे