2012-09-19 129 views
1

當我在JavaScript中使用這個表達式聲明:「意外的量詞」錯誤使用javascript正則表達式

var phoneRegExp = /^(\+\s?)?((?<!\+.*)\(\+?\d+([\s\-\.]?\d+)?\)|\d+)([\s\-\.]?(\(\d+([\s\-\.]?\d+)?\)|\d+))*(\s?(x|ext\.?)\s?\d+)?$/i; 

它給了我在IE10的「意外的量詞」的錯誤。 Chrome瀏覽器報告「無效的組」。 據我所見,表達式是好的,我已用http://regexhero.net/tester進行了測試,它與.NET4.5中使用的相同。PhoneAttribute

任何想法?

+5

的Javascript正則表達式不支持向後看斷言。 – lanzz

+0

@lanzz你不能這樣做:http://stackoverflow.com/a/7376273/1240268。請同時參閱http://sscce.org/ –

+0

@hayden可能會支持預見。我沒有時間深入研究正則表達式來提供一種替代方法,這並不是一個小問題,因此我的評論不是回答。 – lanzz

回答

1

面對相同的問題,並通過顛倒原始正則表達式模式並用lookahead替換lookbehind來解決它。最後一個技巧是反轉要對照正則表達式進行測試的輸入字符串。

這個想法在Steven Levithan的Mimicking Lookbehind in JavaScript博客文章中有很好的描述。

下面是我的測試頁面,在這裏你可以看到工作正則表達式:(?!`(<\ + *)`)

<html> 
    <head> 
     <title>Phone Number RegExp Test Page</title> 
    </head> 
    <body> 
     <script> 
      function validateInput() {    
       var phoneRegex = new RegExp("^(\\d+\\s?(x|\\.txe?)\\s?)?((\\)(\\d+[\\s\\-\\.]?)?\\d+\\(|\\d+)[\\s\\-\\.]?)*(\\)([\\s\\-\\.]?\\d+)?\\d+\\+?\\((?!\\+.*)|\\d+)(\\s?\\+)?$", "i"); 

       var input = document.getElementById("tbPhone"); 
       var value = input.value.split("").reverse().join(""); 
       alert(phoneRegex.test(value)); 
      }   
     </script> 

     <input type="text" id="tbPhone" /> 
     <button onclick="javascript:testPhone()">Validate</button> 
    </body> 
</html> 
相關問題