2017-07-27 21 views
-1

我試圖爲JS編寫一個或多或少複雜的regEx。它通過我所有的測試,除了兩個,我不知道爲什麼。這是代碼如何正確使用JS regEx中的「或」命令?

function telephoneCheck(str) { 
    regEx1 = /^[1]\s(\d{3}[-]){2}\d{4}|(\d{3}[-]){2}\d{4}$/; 
    regEx2 = /^\d{10}$/; 
    regEx3 = /^[1]\s(\d{3}\s){2}\d{4}|(\d{3}\s){2}\d{4}$/; 
    regEx4 = /^[1]\s[(]{1}\d{3}[)]{1}\d{3}[-]{1}\d{4}|[(]{1}\d{3}[)]{1}\d{3}[-]{1}\d{4}$/; 
    regEx5 = /^[1]\s[(]{1}\d{3}[)]{1}\s\d{3}[-]{1}\d{4}|[(]{1}\s\d{3}[)]{1}\d{3}[-]{1}\d{4}$/; 
    if (regEx1.test(str) || regEx2.test(str) || regEx3.test(str) || regEx4.test(str) || regEx5.test(str)) { 
    return true; 
    } 
    else { 
    return false; 
    } 
} 

,而這些都是兩個測試它不正確地傳遞(兩者都應該回來爲false但我得到true代替):telephoneCheck("2(757)622-7382")telephoneCheck("(555-555-5555")。 我的問題是如何正確使用|(或)運算符(我認爲這會使我的代碼更好看)以及如何描述regEx中的表達式以匹配特定字符(例如,開始處的「1」的數量)?我做了[1]{1}[1]$,但它似乎沒有工作。 感謝您的任何提示和建議!

+1

太多問題:關注一個。 – trincot

+0

不需要'{1}'。 – trincot

回答

2

如何我描述中的正則表達式的表達式來(在號碼的開頭的例如「1」)匹配特定字符

要匹配特定的字符,只要使用該字符。 x是匹配字母「x」的有效正則表達式字符串。要匹配一個特殊字符,請先將其轉義。正則表達式.將匹配任何字符;正則表達式\.將匹配一個句點。

請注意,正則表達式x相當於[x]因爲它們將匹配相同的東西,但前者更短,更易於閱讀。在給出選擇的情況下,直接使用單個字符(如有必要,請轉義)並忘記[ ]

你的正則表達式包含表達式,如[-],[(][1]。放下括號。在第二個,你將需要逃避(

[(]{1}等表達式相當於\({1}只是意味着匹配上一個項目一次。那麼使用該項目本身就可以完成同樣的事情。兩個字符比六個短很多,並且會使您的正則表達式更易於閱讀。

如何使用| (或)運營商

使用|運算符非常簡單。它將匹配左側或右側的內容。用圓括號括起來限制匹配。例如,a|bc將匹配「a」或「bc」。 (a|b)c將匹配「ac」和「bc」。

+0

非常好的和詳細的解釋,謝謝@艾米! –

0

您遇到的主要問題是^$錨點只會在|的旁邊進行操作。但是你會希望你在它的任何一邊都有的圖案可以與^$匹配。

因此,而不是^ | $,做^( | )$^ $|^ $

正如其他人所說,你可以簡化很多。

相關問題