当我在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中使用的相同
有什么想法吗?
答案 0 :(得分:2)
面对同样的问题并通过颠倒原始正则表达式模式并用前瞻代替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>