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.5PhoneAttributeで使用されているものと同じです。

何か案は?

4

1 に答える 1

2

同じ問題に直面し、元の正規表現パターンを逆にして、後読みを先読みに置き換えることで問題を解決しました。最後のトリックは、正規表現に対してテストされる入力文字列を逆にすることです。

このアイデアは、JavaScriptのブログ投稿にあるStevenLevithanのMimickingLookbehindで詳しく説明されています。

以下は、動作中の正規表現を確認できる私のテストページです。

<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 に答える