[英]Javascript RegEx partial match
我有一個正則表達式模式,它驗證三位數字
/^\d{3}$/.test("123") // true
/^\d{3}$/.test("123.") // false
我想使用此正則表達式作為文本框的輸入限制。
基本上,如果新值匹配,我允許輸入字符,否則我會阻止它。
問題是沒有任何值匹配,因為“1”不是完全匹配,並且不允許我輸入它。
是否有任何方法可以在javascript中測試regEx的部分匹配?
/^\d{3}$/.test("123") // true
/^\d{3}$/.test("12") // "partial match"
/^\d{3}$/.test("a12") // false
編輯
\\ d {3}只是一個例子。 我需要使用電子郵件正則表達式或手機正則表達式作為輸入限制。
"email" // true
"email@" // true
"email@@" // false
"@yahoo.com" // false
編輯2
我有一個textBox插件,其輸入限制基於正則表達式。
正則表達式可以是任何東西,十六進制顏色正則表達式,例如:(#){1}([a-fA-F0-9]){6}
我需要阻止用戶插入與正則表達式不匹配的字符。
例如,如果文本框為空,則第一個允許的字符為“#”。
但是如果我對正則表達式測試“#”字符,它將返回“false”,因為“#”本身無效。
/^(#){1}([a-fA-F0-9]){6}$/.test("#") // false
但與此同時,“#”部分有效,因為它尊重正則表達式格式(我應該允許用戶輸入)
我需要知道的是,如果我可以驗證字符串是否是正則表達式的部分匹配,那么我可以允許用戶鍵入字符。
/^(#){1}([a-fA-F0-9]){6}$/.test("#") // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#0") // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#00") // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#000") // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#0000") // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#00000") // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#000000") // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#000000D") // is not a match, prevent typing
您可以使用()?
部分驗證電子郵件地址()?
更多的字母和/或字符。 每個()?
在驗證樹中更深入。
以下正則表達式模式逐個字母地驗證電子郵件地址。
^[a-zA-Z]+(@{1}[a-zA-Z]*(\.{1}[a-zA-Z]*)?)?$
它沒有考慮到那里的所有可能性,但是對於像aa@bb.dd這樣的基本功能,它工作得很好,並且還有進一步改進它的空間。
使用像maskedinput.js這樣的庫會更好。 然后,您可以設置文本輸入,如下所示:
jQuery(function($){
$("#your_input").mask("999");
});
UPDATE
您可以使用驗證器表單和預設特定類型的字段進行驗證
你會想要使用明確的“|” 部分匹配。 對於您的顏色匹配示例,它非常簡單,您只需要顯式匹配空字符串partial
/^(|#[a-f0-9]{0,6})$/i.test(inputStr)
對於電子郵件而言,由於存在更多部分匹配組合,因此它更復雜
/^(|\w+|\w+@|\w+@\w+|\w+@\w+\.|\w+@\w+\.\w+)$/.test(inputStr)
請注意,您無法使用/^(|\\w*@|...)$/
類的/^(|\\w*@|...)$/
因為它匹配@blah.com
,這不是有效的部分輸入。
您可以在表達式中指定一個范圍,以便它匹配一到三個數字之間的任何內容,如下所示:
/^\d{1,3}$/.test("1") // true
/^\d{1,3}$/.test("12") // true
/^\d{1,3}$/.test("123a") // false
只提供允許部分匹配的正則表達式。 例如/^\\d{1,3}$/
根據你的上一次編輯,這應該工作:
/^#[a-fA-F0-9]{0,6}$/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.