[英]Regular expression masked input
我試圖創建一個正則表達式掩碼以限制輸入字段。
到目前為止,我想到了這個
^[^0][0-9]*(,?[0-9]*)*$
以下應該是可接受的值:
123456,12,1,654,19512
2321
312,1
基本上,任何給定的整數后跟一個逗號和另一個整數(位數無關緊要),但是任何整數組都不應以零開頭。
但是我錯過了一些額外的表達,因為以下值被接受並且不應該:
123012
123,0123
123,0,0
123,0,0 ,,,, 0,31
我將非常感謝您的幫助,因為我是Regex代碼的新手。
編輯:我知道該值可能有一個逗號結尾,但是沒關系,提交值后我已經有一個輸入驗證
另外,如何允許退格鍵在輸入中起作用?
您不應將逗號標記為可選 :
^[1-9][0-9]*(,[1-9][0-9]*)*$
會的
^[1-9]\d*(,\s*[1-9]\d*)*$
以1-9開頭,后跟0或多個數字,后跟相同結構且以逗號開頭0或多次的任何內容
如果您要在擊鍵之間進行驗證,則此正則表達式可能有效。
接受后需要其他正則表達式。
// ^(?![0,]|[\d,]*,0$|[\d,]*,,$)[\d,]+$
^ # BOL
(?! # Not any of these
[0,] # No 0 or , at beginning of string
| [\d,]* ,0 $ # No ,0 at end of string
| [\d,]* ,, $ # No ,, at end of string
)
[\d,]+ # validate these to restrict input chars
$ # EOL
我想添加評論,但最終寫得太多,因此無法將其轉移給答案。
您想要的正則表達式Guillaume Poussel和Luis Gonzalez都是您想要的(盡管它們的語法略有不同,更重要的是,Luis的正則表達式允許逗號和整數之間的空格)-用於最終驗證。 正如Guillame Poussel在他的評論中指出的那樣,您需要分兩步進行驗證-第一步是輸入掩碼,一步是完成校驗。 他們提供給您的正則表達式用於完成的所有部分-您可能希望將此正則表達式放在輸入控件的blur事件上。 對於控制輸入(取消用戶的擊鍵)的按鍵或類似事件,您需要一個更為寬松的正則表達式,該表達式允許尾隨逗號,前導零甚至以多個逗號結尾的字符串,即
^[1-9][0-9]*(,[0-9]*)*$
。
如果您對客戶端能夠插入無效的輸入字符串並被告知沒有任何問題感到不滿意,但是在轉到另一個字段或其他內容后卻被告知該字符串無效,那么您也可以使用已經獲得的一個正則表達式答案,而不是將其用作掩碼正則表達式(如果輸入無效,則取消按鍵),您可以讓該正則表達式將字段背景更改為紅色或類似的東西,以立即通知用戶輸入,由於目前無效。
您也可以做一個混合解決方案,其中您的遮罩輸入像我建議的那樣松散,並且在同一事件中使用最終的正則表達式,但是不要取消失敗的正則表達式,而要取消按鍵,而是將背景更改為紅色或其他。並且僅在寬松的正則表達式失敗時才取消。 這樣,您的用戶就可以避免編寫大多數無效的輸入字符串,並且對於那些無效的輸入字符串,可以立即通知他無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.