2

当我在 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 中使用的相同

有任何想法吗?

4

1 回答 1

2

面临同样的问题并通过反转原始正则表达式模式并将lookbehind替换为lookahead来解决它。最后一个技巧是反转将要针对正则表达式进行测试的输入字符串。

这个想法在 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>
于 2012-09-20T19:19:51.097 回答