2012-10-29 11 views
5

जावास्क्रिप्ट में, मैं नियमित अभिव्यक्ति औरफ़ंक्शन का उपयोग करके उपयोगकर्ता समय इनपुट को कैसे सत्यापित और संशोधित कर सकता हूं ताकि उपयोगकर्ता को कुछ भी कहने के बजाय, यह फ्लाई पर इनपुट को मान्य और संशोधित करेगा ?फ्लाई पर समय इनपुट मान्य करें और संशोधित करें

उदाहरण के लिए, उपयोगकर्ता इनपुट 1.12p13:121,12PM हो सकता है, लेकिन अंतिम परिणाम हमेशा 1:12 PM होना चाहिए।

किसी को भी ऐसा करने के तरीके पर उदाहरण है?

पीएस। मुझे पता है कि timepicker का उपयोग कर एक तरह से और अधिक कुशल तरीका है, लेकिन मैं इस मामले में उपयोगकर्ता इनपुट का उपयोग करने के

+1

मैं तुम्हारे लिए एक जवाब नहीं है, लेकिन मैं कुछ सलाह है। जब एक विधि बाहर खोज यह करने के लिए और अगर आप एचटीएमएल 5 का समर्थन कर सकते, (https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/input), और प्यार के लिए [इनपुट डोम घटना] का उपयोग करें सभी चीजों में से प्यारा और लालसा, कीप या कीडाउन घटनाओं का उपयोग न करें। सिरदर्द के बाद वे आपको सिरदर्द का कारण बनेंगे। दुर्भाग्यवश, यदि आप एचटीएमएल 5 का समर्थन कर सकते हैं तो यह सब कुछ है। : \ –

+0

दुर्भाग्य से मैं कुछ वास्तव में पुराने स्रोत के साथ काम कर रहा हूं जो jQuery का उपयोग भी नहीं करता है, अकेले एचटीएमएल 5 दें। – Victor

+0

आपने अभी तक कोई समाधान नहीं मिला है? – JDB

उत्तर

1

एक साधारण regex आप एक प्रारंभिक बिंदु के रूप में उपयोग कर सकते हैं:

(\d{1,2})\s*[.,:;]\s*(\d{1,2})\s*(([Aa]|[Pp])[Mm]?)? 
^  ^^ ^^  ^^^  ^
Hour group |  | Minutes | | |   M is optional 
     | Valid separators | | Case-insensitivity 
     |  |   | AM/PM group 
     ------------------------------Allow spaces 

आप ' अभी भी (59:99 शायद मान्य नहीं है) को मान्य करने के उस समय वैध है की जरूरत d, लेकिन यह कम से कम यह आसान जावास्क्रिप्ट में स्ट्रिंग पार्स करने में होगा। आपके द्वारा इसे पार्स करने के बाद, आप इसे वापस प्रिंट कर सकते हैं हालांकि आप चाहते हैं।

संपादित करें: ओह। भूल गए कि जावास्क्रिप्ट नामित समूहों का समर्थन नहीं करता है। केवल समान समूहों में क्रमांकित समूहों का उपयोग करें।

उदाहरण
क्या घास ... यहाँ एक पूरा काम कर उदाहरण है। जब मान्य करने के लिए (और अवैध निवेश के साथ क्या करना है) आप पर निर्भर छोड़ दिया है:

<html> 
    <head> 
     <script> 
function parseTime(timeString){ 
    var timePattern = /(\d{1,2})\s*[.,:;]\s*(\d{1,2})\s*(([Aa]|[Pp])[Mm]?)?/; 
    var timeMatch = timePattern.exec(timeString); 

    var INVALID = null; 

    if (timeMatch !== null){ 
     var hour = timeMatch[1]; 
     var minute = timeMatch[2]; 
     var ampm = timeMatch[3]; 

     if (minute < 0 || minute > 59) 
      return INVALID; 

     if (ampm != ""){ 
      if (hour < 1 || hour > 12) 
       return INVALID; 

      ampm = ampm.substring(0,1).toUpperCase() == "A" ? "AM" : "PM"; 
     } else { 
      if (hour > 23) 
       return INVALID; 

      ampm = (hour < 13 ? "AM" : "PM"); 
      hour = hour % 12; 
      if (hour == 0) hour = 12; 
     } 

     return hour + ":" + minute + " " + ampm; 
    } else { 
     return INVALID; 
    } 
} 

function unitTest(){ 
    var testStrings = [ 
     ["1:30 PM", "1:30 PM"], 
     ["1.30p", "1:30 PM"], 
     ["1;30a", "1:30 AM"], 
     ["59:99 PM", null], 
     ["0,30", "12:30 AM"], 
     ["15:00", "3:00 PM"], 
     ["abc", null] ]; 

    var testResults; 
    testResults = "<table><tr><th>Input</th><th>Expected</th><th>Actual</th></tr>"; 

    for (var i = 0; i < testStrings.length; i++){ 
     testResults += 
      "<tr>" + 
       "<td>" + testStrings[i][0] + "</td>" + 
       "<td>" + testStrings[i][1] + "</td>" + 
       "<td>" + parseTime(testStrings[i][0]) + "</td>" + 
       "<td>" + (testStrings[i][1] == parseTime(testStrings[i][0]) ? 
          "<span style='color:green'>Success</span>" : 
          "<span style='color:red'>Failure</span>") + 
       "</td>" + 
      "</tr>"; 
    } 

    testResults += "</table>"; 

    this.document.getElementById("results").innerHTML = testResults; 
} 
     </script> 
    </head> 
    <body onload="unitTest();"> 

     <div id="results"> 
     </div> 

    </body> 
</html> 

आउटपुट:

इनपुट अपेक्षित वास्तविक
1:30 PM पर 1:30 PM पर 1: 30 PM सफलता
1.30p 1:30 PM 1:30 PM सफलता
1; 30a 1:30 पूर्वाह्न 1:30 पूर्वाह्न सफलता
59:99 PM अशक्त अशक्त सफलता
0,30 12:30 पूर्वाह्न 12: 3 0 पूर्वाह्न सफलता
15:00 3:00 PM पर 3:00 PM पर सफलता
एबीसी अशक्त अशक्त सफलता

+0

एक काम उदाहरण के साथ मेरा उत्तर अपडेट किया गया। – JDB

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