最も簡単な方法は、regex1とregex2を取ると、このように一緒にそれらを投げることです。あなたのケースでは:
^(\d{4}|d{2})[-/]
と$
ここで私は?|
分岐リセットを使用します。
:
^(\d{4}|\d{2})[-/](?|(0?[1-9]|[12][0-9]|3[01])[-/](0?[1-9]|1[012])$|(0?[1-9]|1[012])[-/](0?[1-9]|[12][0-9]|3[01]))$
は\d
があなたの目的のために[0-9]
と同じであると仮定すると、あなたは少しことを短縮することができます
^(\d{4}|\d{2})[-/](?|(0?[1-9]|[12]\d|3[01])[-/](0?\d|1[012])$|(0?[1-9]|1[012])[-/](0?[1-9]|[12]\d|3[01]))$
これはオリジナルのregに最も近いものですexes。
一方、検証の一部を省略することもできます。その日と一致する部分もすべての月に一致します。
この正規表現:
^(\d{4}|\d{2})[-/](0?[1-9]|[12][0-9]|3[01])[-/](0?[1-9]|[12][0-9]|3[01])$
([-/]
に分割することは簡単ですので)あなたがグループをキャプチャする気にしないのであれば、あなたが使用することができます。
^(\d{4}|\d{2})([-/](0?[1-9]|[12][0-9]|3[01])){2}$
それはすべてのものと一致します古い正規表現は一致した。欠点は、それはまたのように「日付」と一致していることである:
もちろん
2000/31/30
、最短正規表現を(理由以内、それ以外の場合は.*
だ)のようになります:あなたがすることはできません
^(\d{2}){1,2}([-/]\d{1,2}){2}$
号。正確にどのように '2016/03/04'と' 2016/04/03'を区別する予定ですか?どちらも完全に有効ですが、3月4日と4月3日は全く同じ日付ではありません。 **これだけの方法は、13日から28日、29日、30日、31日のみ有効となるように、1日から12日に何かが起こることを禁じた場合です。 –
だから、YYYY/MM/DDの3番目の\ d \ dを先読みし、それが本当にDDかMMかどうかを調べる正規表現に条件付き論理を作りたいのですか?しかし、@ MarkBが書いているように、07が7月か7日であるときは、どうやって分かるでしょうか? 1997/07/07はどうですか?どうやって決めるの? –