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