2017-03-29 7 views
1

カンマ区切りで複数の日付に正規表現を設定する際に問題があります。 私はのようにのように日付を持っている:正規表現をカンマで区切った正規表現をPHPの

.....

2017-03-25, 2017-03-27, 2017-03-28 

は私人を助けてください、私はマルチ日付(jQueryのカレンダーを)選択するためのPHPの検証を設定しようとしています。

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

$value = "2017-03-25, 2017-03-27, 2017-03-28"; 
preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])([0-9])*$/",$value) 
+0

コードに問題がありますか? – Jens

答えて

2

あなたの正規表現でそれの後0+数字のみ単一の日付に一致しています。

次の修正プログラムを使用可能性があります

  • ^ - 文字列の先頭
  • ([0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])) - グループ1のマッチングとキャプチャ:

    ^([0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01]))(?:,\s*(?1))*$ 
    

    regex demo

    詳細を参照してください。日付のようなサブ

  • (?:,\s*(?1))* - ゼロ以上の配列:
    • , - コンマ
    • \s* - 0+空白(一方のみに一致するように*を除去する、または1つのまたは0空白に一致するように?を使用)
    • (?1) - 反復グループ1サブパターン
  • $ - 文字列の末尾。
+1

ありがとうございました.....その作業..... –

+0

@Wiktor "(?1) - recurse Group 1 subpattern"はすばらしいことの一つですが、それはPHPでのみ動作しますか?私は正確な構文を意味する...ちょうどあなたのリンクに行って、Python、langaugeをjavascriptに変えて、うまくいきませんでした。:)好奇心を持って知りたいです。 –

+1

@ RizwanM.Tuman:Pythonで動かないしかし、Boost(Notepad ++など)でも動作します。 Ruby(つまりOnigmoライブラリ)では '(?1)'の代わりに '\ g <1>'を使うことができます。 Pythonでは、PyPi regexモジュールは '(?1)'サブルーチン呼び出しもサポートしています。 –