6

私は他の同様の投稿を見てきましたが、問題はエスケープされていないスラッシュのようです。しかし、私は彼らを逃れています。

文字列は次のようになります。

2012/12/23

これは、検証ルールを宣言する方法です。

regex_match[/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)[0-9]{2}$/]

終了区切り文字があり、日付の 2 つのスラッシュがバックスラッシュでエスケープされています。少し異なるこれも試しましたが、同じエラーが発生します。

regex_match[/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)\d\d$/]

エラーはどこにありますか?

編集:

あなたのアドバイスに従って、コールバック関数を使用してみました。これは、フォーム検証が実行されているコントローラー クラス内にある宣言です。

function mach_date($date) {
   /* DEBUG */ echo 'Here I am!'; exit; // execution should stop here displaying the echo
   return (bool)preg_match('/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)\d\d$/', $date);
}

application/config/form_validation.phpの検証ルール:

$config = array(
     // other validation groups.....,
     'articles' => array(
          // other validated fields.....,
          array(
                'field' => 'date_p',
                'label' => 'Publishing date',
                'rules' => 'callback_match_date'
          )
     )
); 
4

1 に答える 1

6

検証ルールを設定するときは、それらを | で区切ります。そのため、正規表現の|が原因で検証ルールが分割され、エラーが発生しています。この問題に関するディスカッションはこちら。codeigniter の制限またはバグのようです。| の有無にかかわらず正規表現を実行してテストし、パイプの使用によってエラーが発生するかどうかを確認できます。その場合は、他の手段で正規表現によって検証する必要がある場合があります。このページで詳しく説明されているように、関数が正規表現を使用して preg_match を実行するコールバック関数を使用することもできます。この関数は、もちろん関数内にある必要があり、true を返します。 /間違い。

于 2012-12-10T17:00:08.583 に答える