2016-12-02 105 views
0

我有一個HTML的手機模式,將接受這些格式:無效的正則表達式:龍量詞括號

+61 x xxxx xxxx, 
+61xxxxxxxxx, 
0x xxxx xxxx, 
0xxxxxxxxx, 
xxxx xxxx, 
xxxxxxxx, 
+xx xxx xxx xxx, 
+xxxxxxxxxxx, 
0xxx xxx xxx, 
0xxxxxxxxx 

它是幾個月前的工作,現在突然我的手機字段不驗證。我有這個錯誤:

Pattern attribute value ^(?:0|\(?\+61\)?\s?|0061\s?)[1-79](?:[\.\-\s]?\d\d){4}|(\d{4}[\s]\d{4})|(\d{8})|(\d{4}[\s]\d{3}[\s]\d{3})|(\+61\[\s]\d{3}[\s]\d{3}[\s]\d{3})|(\+61\s\d{3}\s\d{3}\s\d{3})$ is not a valid regular expression: Uncaught SyntaxError: Invalid regular expression: /^(?:0|\(?\+61\)?\s?|0061\s?)[1-79](?:[\.\-\s]?\d\d){4}|(\d{4}[\s]\d{4})|(\d{8})|(\d{4}[\s]\d{3}[\s]\d{3})|(\+61\[\s]\d{3}[\s]\d{3}[\s]\d{3})|(\+61\s\d{3}\s\d{3}\s\d{3})$/: Lone quantifier brackets 
+1

這正是它的意思。此正則表達式無效。 – nicovank

+0

是的,正則表達式存在一個明確的問題,如果你不熟悉構造和測試正則表達式的語義,我強烈建議使用像expresso這樣的工具(http://www.ultrapico.com/Expresso.htm )來構建和測試正則表達式。 –

+0

看看可視化,你可以清楚地看到它是無效的 - https://regexper.com/#%5E(%3F%3A0%7C%5C(%3F%5C%2B61%5C)%3F%5Cs %3F%7C0061%5CS%3F)%5B1-79%5D(%3F%3A%5B%5C。%5C-%5CS%5D%3F%5CD%5CD)%7B4%7D%7C(%5CD%7B4 %7D%5B%5CS%5D%5CD%7B4%7D)%7C(%5CD%7B8%7D)%7C(%5CD%7B4%7D%5B%5CS%5D%5CD%7B3%7D%5B%5CS %5D%5CD%7B3%7D)%7C(%5C%2B61%5C%5B%5CS%5D%5CD%7B3%7D%5B%5CS%5D%5CD%7B3%7D%5B%5CS%5D%5CD %7C%7C%5C%2B61%5Cs%5Cd%7B3%7D%5Cs%5Cd%7B3%7D%5Cs%5Cd%7B3%7D)%24 –

回答

0

這意味着確切的說,模式無效。

如果你想匹配來自澳大利亞的手機,你可以使用:

pattern="^(?:0|\(?\+61\)?\s?|0061\s?)[1-79](?:[\.\-\s]?\d\d){4}$" 

模式找到here

例子: https://jsfiddle.net

0

到目前爲止,沒有人關心,以顯示其中的式樣上錯誤的。

…|(\+61\[\s]\d{3}[\s]\d{3}[\s]\d{3})|(\+61\s\d{3}\s\d{3}\s\d{3})$ 
    ^

有錯誤,你插入一個反斜槓,逃避開括號,所以使它成爲一個普通的字符和離開右括號Lone。 (不幸的是,錯誤信息有點誤導,因爲那些括號當然不是quantifier brackets。)