[PHP-users 29626] 正規表現の値の確保

青山慎一 aoyama @ ddthink.com
2006年 7月 5日 (水) 14:03:19 JST


こんにちは、Shouです。

正規表現で正しい日付の判別を行おうとしているのですが、
<?php
	if( Ereg( "^[0-9]+/[0-9]+/[0-9]+$" , $_REQUEST["birthday"], $backRef ) ) {
		if( CheckDate( $backRef[2],$backRef[3],$backRef[1] ) ) {	//月、日、年の順番で
			print "正しい書式です\n";
		} else {
			print "不正な入力:存在しない日付\n";
		}
	} else {
		print "不正な入力:yyyy/mm/dd形式で\n";
	}
	print "\n";
	print_r( $backRef );
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>無題ドキュメント</title>
</head>
<body>
</body>
</html>
というコードを、変数birthdayに適切な値を入力して実行すると、正しい値が確保されていても
Notice: Undefined offset: 2 in c:\inetpub\wwwroot\formcheck\checkData.php on line 3

Notice: Undefined offset: 3 in c:\inetpub\wwwroot\formcheck\checkData.php on line 3

Notice: Undefined offset: 1 in c:\inetpub\wwwroot\formcheck\checkData.php on line 3
不正な入力:存在しない日付 Array ( [0] => 1971/02/14 ) 
というメッセージが出ます。
配列backRefには0番の要素しか入っていないとのことですが、書籍にはEreg関数の後方参照には1番から配列が入力されると書いてありました。
PHPマニュアルにも同様のことが書いてありました。
どのようにしたら[1]〜[3]の配列要素を確保できるのでしょうか。
PHP5.1.4
Windows2000SP4です。

よろしくお願いします。


PHP-users メーリングリストの案内