2011-07-23 20 views
2
s="12/15" 
r=/((0?[1-9])|(1[0-2])){1}\/((0?[1-9])|(1[0-9])|(2[0-9])|(3[0-1])){1}/g 
s.match(r) 

> ["12/1"] 

日付形式mm/dd を検証しようとしましたが、一致する文字列の最後の桁が欠落していました。javascript正規表現の検証

誰でも手助けできますか? おかげで、 チェン

+0

@muが短すぎるので、除外できます。私の答えを見てください。 –

答えて

4

使用この正規表現:^(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01])$

あなたは、文字列でマッチをしたい場合は、使用の単語の境界、例えば:

\b(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01])\b 

(?x) 
^ 
(
    0?[1-9] # 1-9 or 01-09 
    | 
    1[0-2] # 10 11 12 
) 
/
(
    0?[1-9] # 1-9 or 01-09 
    | 
    [12][0-9] # 10-29 
    | 
    3[01]  # 30 31 
) 
$ 

大正規表現:

(?x) 
\b(?: 
(?<month> 
    0?[13578] 
    | 
    1[02] 
) 
/
(?<day> 
    0?[1-9] 
    | 
    [12][0-9] 
    | 
    3[01] 
) 
| 
(?<month> 
    0?[469] 
    | 
    11 
) 
/
(?<day> 
    0?[1-9] 
    | 
    [12][0-9] 
    | 
    30 
) 
| 
(?<month> 
    0?2 
) 
/
(?<day> 
    0?[1-9] 
    | 
    [12][0-9] 
) 
) 
\b 
+0

ありがとう、それは動作します。 – cheng

+0

私は何が間違っていたのか教えていただけますか? – cheng

+0

@cheng、文字列の先頭と末尾を忘れた、つまり '^'と '$'。 –

1

最初に括弧の一部を削除しました。

あなたの問題を解決するための1つの可能性は、あなたの文字列が日付のみである場合、これは解決策になるアンカー

^(0?[1-9]|1[0-2]){1}\/(0?[1-9]|1[0-9]|2[0-9]|3[0-1]){1}$ 

を使用することです。これらのアンカー^$は、式が最初から最後まで一致するようにします。

は、第二の可能性があなたの最後の部分の順序を変更することですhere online on Regexr

それを参照してください。最初の部分0?[1-9]が一致したため

(0?[1-9]|1[0-2]){1}\/(1[0-9]|2[0-9]|3[0-1]|0?[1-9]){1} 

はあなた15あなたの表現は成功し、それはそれでした。これを最後に置くと、最初に2桁の数字と一致するようにしようとすると、15