1

私は、ユーザーが dd-MMM-yyyy 形式で値を入力できるようにする多文化 Web サイトを持っています。C# の文化に基づいてさまざまな値を判断できます (May、英語 = May、ドイツ語 = Mai)

私が抱えている問題は、これらの月の JavaScript 検証です。許容値のリストを作成できます。

英語:

^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$

ドイツ人:

^Jan$|^Feb$|^Mrz$|^Apr$|^Mai$|^Jun$|^Jul$|^Aug$|^Sep$|^Okt$|^Nov$|^Dez$

この正規表現の大文字と小文字を区別しないようにしたいだけです。しかし、私が見るすべての参照はすべて /gi フラグを指していますが、私はすべての例が意味をなさない. 私は次のことを試しましたが、うまくいきません:

var shouldMatch = "may";
var regexPattern = "^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$/gi"
if(shouldMatch.match(regexPattern) != null) {
    //this should happen
}

私は何を間違っていますか?JavaScriptの正規表現ヘルプが私を殺しています。

4

5 に答える 5

1

jsFiddle Demo

しかし、「mAR」や「MAr」などと一致させようとするのはどうでしょうか? これはすぐに興味深いシナリオになります。私の意見では、これを行う簡単な方法は、大文字に一致させることです

var shouldMatch = "May";
var regexPattern = "^JAN$|^FEB$|^MAR$|^APR$|^MAY$|^JUN$|^JUL$|^AUG$|^SEP$|^OCT$|^NOV$|^DEC$";
if(shouldMatch.toUpperCase().match(regexPattern) != null) {
 alert("match");
}
于 2013-05-10T00:26:59.820 に答える
1

正規表現は文字列であってはなりません:

var shouldMatch = "may";
var regexPattern = /^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$/i;
if(shouldMatch.match(regexPattern) != null) {
    // this seems happened
}
于 2013-05-10T00:27:41.683 に答える
1

regexPattern正規表現ではなく、文字列です。

match で使用する前に RegExp に変換します。

var regexPattern = new RegExp("^JAN$|^FEB$|^MAR$|^APR$|^MAY$|^JUN$|^JUL$|^AUG$|^SEP$|^OCT$|^NOV$|^DEC$", "gi");

また、shouldMatch使用する前に大文字に変換してください。

shouldMatch = shouldMatch.toUpperCase();
于 2013-05-10T00:28:26.233 に答える
0

これはうまくいくはずです。

テストを使用するように変更

先頭の "^" から末尾の "$" までの文字列全体をテストしているため、グローバルな "g" フラグは必要ありません。

文字列regexPatternRegExp オブジェクトに変更

大文字と小文字を区別しないため、「i」フラグが必要です。

Javascript

var shouldMatch = "may";
var regexPattern = /^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$/i;
if(regexPattern.test(shouldMatch)) {
    alert(shouldMatch);
}

jsfiddleについて

これを行うことで、少し短くして少し醜くすることもできます

var regexPattern = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)$/i;

jsfiddleについて

正規表現の代わりに、String.indexOfArray.someを使用して、各パターンを試して、テストしている文字列に含まれているかどうかを確認することもできます。この例では、最新のブラウザーまたは古いブラウザーの「shim」/「polyfill」が必要です。文字列が含まれているかどうかを確認するのではなく、文字列全体に一致させたい場合は、「===」をチェックすることもできます。

Javascript

var shouldMatch = "may";
var patterns = "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec".split("|");
var matched = patterns.some(function (pattern) {
    if (shouldMatch.toLowerCase().indexOf(pattern.toLowerCase()) !== -1) {
        alert(shouldMatch);
        return true;
    }

    return false;
});

jsfiddleについて

于 2013-05-10T00:59:07.583 に答える
0

または一緒に可能性を実行します-

var Rx=/^(jan|feb|m(ar|rz)|apr|ma[iy]|jun|jul|aug|sep|o[ck]t|nov|de[cz])$/i

Rx.test('may');
于 2013-05-10T01:33:41.443 に答える