2

私はこの正規表現を試しました:

(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d

テキスト型の入力で、正常に機能しました。

<input type="Text" pattern="(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d"  title="Must be DD.MM.YYYY (ex: 29.11.2012)" class="std_input_long" id="toDate">

ただし、正規表現オブジェクトを使用してJavaScriptで実行しようとすると、うまくいきません.これを理解できる人なら誰でも.

JavaScript:

var regex = new RegExp('(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d');
var startDate = "23.11.2012";
var endDate = "11.12.2012";
var bStartDate = regex.test(startDate);
alert(bStartDate);
if (bStartDate) {
    var bendDate = regex.test(endDate);
    alert(bendDate);
    if (bendDate) {
        alert('both correct')
    } else {
        alert('End date incorrect must be DD.MM.YYYY \n\n\
               Example: 29.11.2012');
    }
} else {
    alert('Start date incorrect must be DD.MM.YYYY \n\n\
               Example: 29.11.2012');
}​

これは、実験するためのJSfiddleです。

4

2 に答える 2

2

そのはず

var regex = /(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d/;

'\.'文字列リテラルは、正規表現エンジンに渡される前に解釈されます。たとえば/./'\d'/d/

于 2012-11-29T09:36:14.317 に答える
0

正規表現文字列のバックスラッシュをエスケープする必要があります。

"(0[1-9]|[12][0-9]|3[01])\\.(0[1-9]|1[012])\\.(19|20)\\d\\d"

ただし、正規表現リテラルを使用する方が簡単です。たとえば、次のようになります。

/(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d/.test("23.11.2012")

または文字列メソッドを使用:

"23.11.2012".match(/(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d/)
于 2012-11-29T09:59:19.350 に答える