1

ASP.NETMVCのモデル検証用のRegularExpressionDataAnnotationで、この回答https://stackoverflow.com/a/164994/4950で指定されているUKPostコードの正規表現を使用しようとしています。

正規表現は次のとおりです。

(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})

これはサーバー側では正常に機能し、Regex hero(http://regexhero.net/tester/)でテストした場合、クライアント側では正規表現が機能しないようです。

Jquery.validate.unobtrusiveプラグインが使用しているコードを確認しました。

$jQval.addMethod("regex", function (value, element, params) {
    var match;
    if (this.optional(element)) {
        return true;
    }

    match = new RegExp(params).exec(value);
    return (match && (match.index === 0) && (match[0].length === value.length));
});

ここで同じ状況を複製しました:http://jsfiddle.net/cEGsj/(後でgiパラメータを追加しました)。

この正規表現がJSで失敗する理由を誰かに教えてもらえますか?最初は大文字と小文字を区別することだと思っていましたが、大文字と小文字を区別しないオプションを追加しても何も変わらないようです。

また、ここでは機能していないようです:http: //regexpal.com/したがって、構文の問題があるはずです。

更新:ネストされた文字セットを削除することで、問題なく機能するようになりました。ここで実際の例を参照してください:http://jsfiddle.net/Asyqh/1/

4

1 に答える 1

0

Javascriptが気に入らないように見えるネストされた文字セットを削除することで、問題なく機能するようになりました。ここで実際の例を参照してください:http://jsfiddle.net/Asyqh/1/

var regex = "(GIR 0AA)|((([A-Z][0-9][0-9]?)|(([A-Z][A-Z][0-9][0-9]?)|(([A-Z][0-9][A-HJKSTUW])|([A-Z][A-Z][0-9][ABEHMNPRVWXY])))) [0-9][A-Z]{2})";
于 2013-01-19T12:21:04.787 に答える