[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 メーリングリストの案内