2017-09-10 69 views
2

以下代碼檢查用戶是否在文本框中插入了正確的時間標記。 如果符號不正確,將顯示警告框。如何在時間標記中自動插入前導零

它還顯示一個警告,如果前導零遺忘(即7:45 ISO 07:45)

function validateThis(e){ 
    //INPUT VALIDATION 
     var regexp = /([01][0-9]|[02][0-3]):[0-5][0-9]/; //CORRECT TIME FORMAT 
     var correct = (e.value.search(regexp) >= 0) ? true : alert('Enter time as hh:mm (13:25)'); 
    } 

我的問題是我怎麼能自動插入遺忘,而不是通知領先的零,如果用戶

+0

夥計們,請解釋一下下-v ote不僅不贊成投票嗎? –

+1

'('0'+ value_to_lead_with_zero_or_not).substr(-2)'。這提供了,你將時間分爲幾小時和幾分鐘,並分別處理它們。注意,當條件沒有通過時,'correct'的值將是'undefined'。此外,條件永遠不會被傳遞,'e'沒有'value'屬性(這裏的'e'是事件對象)。三元運算符不是'if..else'的快捷方式,在這裏使用'if..else'來完成任務。 – Teemu

+0

爲什麼不直接解析輸入而不是依賴正則表達式?拆分冒號,相應地測試值和(重新)格式。 – RobG

回答

1

您可以比較的數字(如果字符串,將其轉換爲數字)10,如果是低於10,加一個零,否則,保持原樣:

注:你可以只是將字符串拆分爲冒號並檢查有效性,否爲正則表達式。

function leadZero(n) { 
 
    return +n < 10 ? "0" + n : n; // +n in case of string, +n converts it to a number 
 
} 
 

 
function validateThis(e) { 
 
    var hhmm = e.value.split(':'); // split into hh, mm 
 
    // if there are two values (hh, mm) and 
 
    // 0<=hh<=23 and 0<=mm<=59 => correct time 
 
    if (hhmm.length === 2 && (+hhmm[0]>=0 && 23>=+hhmm[0]) && (+hhmm[1]>=0 && 59>=+hhmm[1])) { // valid date 
 
    var correct = true; 
 
    // add leading zeros 
 
    //    fix hour     fix minute 
 
    var newTime = leadZero(hhmm[0]) + ':' + leadZero(hhmm[1]); 
 
    console.log(newTime); 
 
    } else { 
 
    alert('Enter a valid time only'); 
 
    } 
 
}
<input type="text" onchange="validateThis(this)">

+1

夥計們,請解釋一下投票不只是贊成投票嗎? –

+0

我沒有,但這是如何回答這個問題? – Kaiido

+0

@Kaiido我更新了我的答案,但即使在更新之前,我的答案也足夠了,因爲它提供了OP需要做的任何工作。 –

-1

首先,你要改變你的正則表達式,因此就可以用不帶前導零來驗證這兩種情況。 如果輸入有效,您可以使用提供的解決方案或其他解決方案之一修改輸入。

1

你可以試試下面的辦法:

function verify() 
 
{ 
 

 
var str=$("#time").val(); 
 
var patt = new RegExp("^(0?[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"); 
 

 
if(patt.test(str)) 
 
    { 
 
    if(str.length==4) 
 
     $("#time").val("0"+str); 
 
    console.log("true"); 
 
    } 
 
else 
 
    console.log("false"); 
 

 

 

 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<input type="text" name="time" id="time" value="" /> 
 
<input type="button" name="sbmt" id="sbmt" value="Submit" onclick="verify();">

0

有了你們的幫助我產生了以下:

function validate(e) { 
 
    var regexp = /([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]/; 
 

 
    if ((e.value.search(regexp) >= 0)) { 
 
    e.value.length == 4 ? document.getElementById(e.id).value = '0' + e.value : 0; 
 
    } else { 
 
    alert('Time is not entered correctly, enter like hh:mm'); 
 
    } 
 
}
<div> 
 
    <label for="name">Time</label> 
 
    <input id="lbl3" class='input' type="text" onchange="validate(this);"> 
 
</div>

+0

當我輸入'13:2'時,它仍然發出警報。我的回答忽略了這一點,並將時間節省爲「13:02」。 –

+0

你的權利蓋克先生,我沒有想到這一點:)。我最關心的地方在哪裏。感謝您指出了這一點。 – Dummy

相關問題