下記のソースは、今日(2016/8/4)まで且つ現実的な西暦と月日に可能な限りマッチさせたい正規表現です。
想定では、「/」「.」「-」で区切られた西暦と月日(2016/1/1や、2016.1.1など)がマッチしたらXXXX年XX月XX日に変換しようとしています。
ただ、下記のソースを見ていただけると解かりますが、$seirekiのような値を代入してもマッチしてしまいます。つまり2550年10月39日のようなありえない西暦と月日もマッチしてしまいます。
2016年8年4日以降と39日のようなありえない日にちにマッチしない正規表現は、作れますか。
また、単語境界をいれないと、2550.10-399と9を一つ多めに足しても「正しい西暦と月日を入力しよう」という画面が出てこなくなります。2555.1000.3999だと単語境界を使わなくても
「正しい西暦と月日を入力しよう」とでてくるのですが、なぜ一桁大目に足しただけだと単語境界が必要になるのでしょうか。
php
1$seireki = "2550.10-39";//変な年、日にちでもマッチしてしまう。 2 3if(preg_match("/\b([1-2]\d\d\d)[\/.\-]([0-1]*[0-9])[\/.\-]([0-3]*[0-9])\b/",$seireki,$data)) { 4print "<p>".$data[1]."年".$data[2]."月".$data[3]."日</p>"; 5print "<p>全体:".$data[0]."</p>"; 6 7} else { 8print "正しい西暦と月日を入力しよう"; 9}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/10 12:20