2014-02-13 21 views
0

使用HTML,PHP,Javascript,mySQL。表單驗證 - 接受某種格式的值

試圖確認用戶必須使用數字在文本字段中輸入時間格式爲「 - : - 」(例如01:30,10:00等)。

如果以「 - : - 」以外的任何其他格式輸入,它會要求用戶輸入正確的格式。

一旦用戶點擊提交按鈕,它就會在文本框旁顯示警告/警告消息,而不是彈出窗口。

它被作爲字符串接收,但我將它保存爲mySQL中的「時間」類型以實現我的目標。

我可以做的地方,我可以驗證該字段不能留空,但被困在這一個。

function validateForm() 

var time =document.forms["entrypage.php"]["eventTime"].value; 
if (time==null || time=="") 

    alert("Please Enter time in --:-- format"); 
    return false; 
爲了達到什麼,我試圖做的,我可以把更多的條件,如果條款中,但它似乎沒有有效的(即 x!="00:01"||x!="00:02"||x!="00:03"...etc

有可能噸的方式

現在這樣做,但一些指導方針/建議將不勝感激。

+0

你需要查看正則表達式 - 這是一個重複的問題在這個網站上:http://stackoverflow.com/questions/11400822/javascript-regex-validate-time –

+0

@RobBaillie他被阻止在那個他想要的部分檢查空的輸入值。那是我從他的問題中瞭解到的。 – Konza

+0

@Rob謝謝主席先生! – smokedMeat

回答

0

對於一個完整的檢查(用於格式和值),我會使用此代碼:

var time = document.forms["entrypage.php"]["eventTime"].value; 
var isValidTime = false; 

if (time !== null && /^[0-1][0-9]:[0-5][0-9]$/.test(time)) { 
    var hourValue = parseInt(time.split(":")[0]); 

    if (hourValue > 0 && hourValue <= 12) { 
     isValidTime = true; 
    } 
} 

return isValidTime; 

打破了這一點,你基本上有三個檢查:

  • time !== null - 有一個值(你可能還需要檢查undefined
  • /^[0-1][0-9]:[0-5][0-9]$/.test(time) - 這個檢查,看看是否有4個數字,在第二和第三號之間的冒號(:) ,並將第一個數字限制爲0或1,將第三個數字限制爲0-5。如果你想支持24小時的格式,更改第一個字符檢查[0-2]

一旦你知道該值的正確格式相匹配,那麼就需要進行檢查,以確保小時值是有效的(畢竟「19」通過正則表達式檢查,但不是有效的小時值)。有兩個步驟:

  • parseInt(time.split(":")[0]); - 分裂時間成兩個部分,然後檢索小時值,作爲Integer
  • hourValue > 0 && hourValue <= 12 - 檢查以確保值是1到12之間,如果你想要支持24小時制的格式,請將第二個支票更改爲hourValue <= 24

所以你去了。 。 。該代碼應該強制執行格式輸入值的有效性。

+0

你搖滾人!先生,做得很好! – smokedMeat

0

將必需的屬性放入您的輸入標籤。這將檢查文本框是否爲空。

<input type = "text" pattern='\d{2}[:]\d{2}' required> 

要檢查您可以用模式正則表達式

這裏是更新的小提琴屬性的正確時間:http://jsfiddle.net/shyamchandranmec/C8B8t/1/

+0

@ Konza感謝的人。我想我需要用RegEx來擺弄一下。 – smokedMeat

+1

**注意:**這僅適用於支持新的表單輸入屬性(不包括IE9或更早版本)的符合HTML5的瀏覽器。 – talemyn

0

我認爲最簡單的方法是使用正則表達式。

一些DOC /教程: http://www.w3schools.com/jsref/jsref_obj_regexp.asp https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

我認爲這應該工作,但它是一種uggly:

if(/[0-9][0-9][:][0-9][0-9]/.test(time)){ 
    alert('correct'); 
} else { 
    alert('wrong input!'); 
} 
+0

非常感謝馬特! – smokedMeat

+0

不客氣。如果它正在工作並回答你的問題,請不要忘記接受答案。 – Matt