簡體   English   中英

Javascript RegEx部分匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM