2009-07-02 21 views
5

मेरे पास एक जावास्क्रिप्ट फ़ंक्शन है जो दिनांक सीमा के लिए जांच करता है। प्रारूप के बावजूद, किसी उपयोगकर्ता ने टेक्स्टबॉक्स में वैध दिनांक इनपुट करने का कोई तरीका है या नहीं?मैं कैसे जांच सकता हूं कि उपयोगकर्ता जावास्क्रिप्ट में मान्य दिनांक पास करता है या नहीं?

function checkEnteredDate() { 
      var inputDate = document.getElementById('txtDate'); 
      //if statement to check for valid date 
      var formatDate = new Date(inputDate.value); 
      if (formatDate > TodayDate) { 
       alert("You cannot select a date later than today."); 
       inputDate.value = TodayDate.format("MM/dd/yyyy"); 
      } 
} 

उत्तर

10

इस पुस्तकालय date.js http://code.google.com/p/jqueryjs/source/browse/trunk/plugins/methods/date.js

यह fromString जो कोशिश करते हैं और एक स्ट्रिंग में परिवर्तित कर देंगे नामक एक उपयोगी कार्य है पर एक नज़र (Date.format पर आधारित) वैध दिनांक ऑब्जेक्ट पर।

फ़ंक्शन झूठा रिटर्न देता है यदि यह वैध दिनांक ऑब्जेक्ट नहीं बनाता है - तो आप सभी लौटने पर छोड़ने से पहले एक अलग प्रारूप का प्रयास कर सकते हैं।

यहाँ कुछ उदाहरण प्रारूप है जिसे आप परीक्षण कर सकते हैं:

Date.format = 'dd mmm yyyy'; 
alert(Date.fromString("26 Jun 2009")); 

Date.format = 'mmm dd yyyy'; 
alert(Date.fromString("Jun 26 2009")); 

Date.format = 'dd/mm/yy'; 
alert(Date.fromString("26/06/09")); 

Date.format = 'mm/dd/yy'; 
alert(Date.fromString("06/26/09")); 

Date.format = 'yyyy-mm-dd'; 
alert(Date.fromString("2009-06-26")); 

जोश

+0

जब तक उपयोगकर्ता प्रारूप निर्दिष्ट नहीं करता है, तब भी आपके पास यूरोप/यूएस अस्पष्टता समस्या होगी। –

+0

@ मैट - सही - इसका एकमात्र समाधान यह जांचना है कि दिन या महीने अधिक हैं या नहीं, 12 - यदि आपको वापस नहीं करना है कि तारीख संदिग्ध है और उन्हें डीडी/एमएम/yyyy – Josh

2

प्रारूप के बावजूद?

कि मुश्किल हो जाएगा ...

  • 2009/07/02 कोई मान्य दिनांक
  • भी
  • भी 2-7-09
  • 02-7 02/07/09 है -'09 भी
  • जुलाई 2009 के दूसरे -> भी मान्य
  • twee Juli tweeduizend negen एन -> भी वैध (डच भाषा)

सभी मान्य, लेकिन सभी एक अलग प्रारूप के साथ। तो, प्रारूप की परवाह किए बिना ... मैं गंभीरता से यह शक है ...

1

आप कर सकते हैं नियमित अभिव्यक्ति या एक कस्टम मेड कोड। उदाहरण नीचे:

function isValidDate(dateStr, format) { 
    if (format == null) { format = "MDY"; } 
    format = format.toUpperCase(); 
    if (format.length != 3) { format = "MDY"; } 
    if ((format.indexOf("M") == -1) || (format.indexOf("D") == -1) || _ 
     (format.indexOf("Y") == -1)) { format = "MDY"; } 
    if (format.substring(0, 1) == "Y") { // If the year is first 
     var reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/ 
     var reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/ 
    } else if (format.substring(1, 2) == "Y") { // If the year is second 
     var reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/ 
     var reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/ 
    } else { // The year must be third 
     var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/ 
     var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/ 
    } 
    // If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail 
    if ((reg1.test(dateStr) == false) && (reg2.test(dateStr) == false)) { return false; } 
    var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was 
    // Check to see if the 3 parts end up making a valid date 
    if (format.substring(0, 1) == "M") { var mm = parts[0]; } else _ 
     if (format.substring(1, 2) == "M") { var mm = parts[1]; } else { var mm = parts[2]; } 
    if (format.substring(0, 1) == "D") { var dd = parts[0]; } else _ 
     if (format.substring(1, 2) == "D") { var dd = parts[1]; } else { var dd = parts[2]; } 
    if (format.substring(0, 1) == "Y") { var yy = parts[0]; } else _ 
     if (format.substring(1, 2) == "Y") { var yy = parts[1]; } else { var yy = parts[2]; } 
    if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); } 
    if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); } 
    var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0); 
    if (parseFloat(dd) != dt.getDate()) { return false; } 
    if (parseFloat(mm)-1 != dt.getMonth()) { return false; } 
    return true; 
} 
4

यह एक बहुत मुश्किल समस्या एक मनमाना प्रारूप में दिनांक पार्स करने के लिए (के रूप में @Natrium बताते हैं) है। जब आप मानते हैं कि यूरोप अपनी तिथियों को डीडी/एमएम/वाईय के रूप में लिखता है तो यह और भी भ्रमित है, इसलिए आप यह नहीं बता सकते कि 2/7/09 7 फरवरी या 2 जुलाई है या नहीं।

अधिकांश लोग जावास्क्रिप्ट लाइब्रेरी से datepicker नियंत्रण के प्रकार या महीने, दिन और वर्ष के लिए सेट मानों के साथ ड्रॉपडाउन बॉक्स का उपयोग करके इस समस्या से निपटते हैं।

<select name="month"> 
<option value="1">January</option> 
<option value="2">February</option> 
... 
<option value="12">December</option> 
</select> 

<select name="day"> 
<option value="1">1</option> 
<option value="2">2</option> 
... 
<option value="31">31</option> 
</select> 

<select name="year"> 
<option value="2000">2000</option> 
<option value="2001">2001</option> 
... 
<option value="2009">2009</option> 
</select> 
+0

का उपयोग करना चाहिए चयन का उपयोग करना एक भयानक है उपाय। अब दिन के लिए "27" टाइप करने के बजाय, मुझे संख्याओं की पूरी सूची नीचे स्क्रॉल करने की आवश्यकता है - पुलडाउन अधिकांश प्लेटफॉर्म पर एक संकीर्ण लंबा आयताकार में खुल जाएगा जो प्रबंधित करना मुश्किल है।दूसरी ओर, गैर-चयन आधारित नियंत्रण होने के बावजूद आप अभी भी पार्सिंग समस्या के अधीन हैं। – levik

+1

असल में, यदि आप चुनिंदा फ़ील्ड में टैब करते हैं तो "2" टाइप करें, फिर "7" यह सही ढंग से "27" चुनेंगे। (फ़ायरफ़ॉक्स का उपयोग करके परीक्षण किया गया)। डेटपिकर के लिए –

+0

+1 – jeroen

0

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

संबंधित मुद्दे

 संबंधित मुद्दे