2017-06-12 38 views
2

我正在嘗試在HTML中對密碼插入表單執行客戶端檢查,我需要密碼才能包含至少一個字母字符和一個數字。我嘗試以下內容:HTML模式驗證始終爲false

<input type="password" name="reg-password" pattern="(?=.*\d)(?=.*[a-zA-Z])" title="The password must contain at least a number and an alphabetic character" required> 

但由於某種原因,我不理解驗證總是失敗,我無法提交表單。你能解釋我的代碼錯在哪裏嗎?我還用一些在線正則表達式調試器測試了正則表達式,它應該沒問題。提前致謝。

此外,有什麼特別的原因,我應該避免這種客戶端驗證方法,並使用Javascript代碼呢?我覺得這種方式要快得多(如果它只是工作)

回答

2

由於HTML5 input pattern需要一個完整的字符串匹配,使用以下命令:

pattern="(?=.*\d)(?=.*[a-zA-Z]).+" 

它會得到翻譯成/^(?:(?=.*\d)(?=.*[a-zA-Z]).+)$/正則表達式,並會正確處理輸入。

如果您使用的是HTML5覆蓋模式的特性處理,明確添加錨點一些額外的框架:

pattern="^(?=.*\d)(?=.*[a-zA-Z]).+$" 

,它會在所有的上下文環境中運行。

JS演示:

<form> 
 
<input type="password" name="reg-password" pattern="^(?=.*\d)(?=.*[a-zA-Z]).+" title="The password must contain at least a number and an alphabetic character" required> 
 
<input type="submit"> 
 
</form>

+0

謝謝你,它的工作!所以如果我對HTML5的理解能夠很好地理解,那麼以前的正則表達式根本就沒有字符,這就是驗證總是失敗的原因,對吧?再次感謝! – RVKS

+1

是的,它期望一個空字符串,但也需要一個數字和一個字母,所以,你的正則表達式是'^(?:(?=。* \ d)(?=。* [a-zA-Z]))$ ' - 一個永遠不會匹配任何字符串的正則表達式。 –