2011-02-02 4 views
0

私はDD/MM/YYYY 'と' DD-MM-YYYY形式で日付フィールドを検証するために、この文字列を使用しています:日付の検証未知の修飾エラー

'/^(0?[1-9]|[12][0-9]|3[01])[\/\.- ](0?[1-9]|1[0-2])[\/\.- ](19|20)\d{2}$/' 

が、私は

このエラーが出ます

警告:preg_match()[function.preg-match]:102行目の/var/www/...fields_lib.phpの未知の修飾語 '\'

上記の文字列はWeb上に入力されています私はフォームが区切り文字自体を埋め込んでいると思うからです。 整数型や10進数などの他の検証タイプでは、この特定のフォームで動作するための検証用のデリミタを削除する必要がありました。

アイデア?

は、あなたの正規表現は [/. -](一部で)読む必要がありますので、あなたが

答えて

1

「エラーが発生しました。他のエラーを取得するには、文字クラス(の代わりに[/\.- ]ではなく)の最初のバックスラッシュを削除しなければなりません。/を正規表現の区切り文字として解釈し、次の文字がa修飾子(の場合はi、大文字と小文字を区別しない場合は、の場合はの場合は

したがって、-は範囲演算子として扱われ、/は正規表現デリミタとして扱われるという2つの問題があります。問題の文字をバックスラッシュ(つまり、[\/.\- ])でエスケープすることで、両方の問題に対処することができますが、それぞれの問題にはより洗練された解決策があります。 -を範囲を形成できなかった最初または最後の位置に移動すると、リテラル-として扱われます。 /については、正規表現の区切り文字として別​​のものを使用することができます。たとえば、

'~^(0?[1-9]|[12][0-9]|3[01])[/. -](0?[1-9]|1[0-2])[/. -](19|20)\d{2}$~' 

FYIでは、.は絶対にエスケープする必要はありません。文字クラスでは、大部分の正規表現メタキャラクタは特別な意味を失います。あなたはちょうど2つの特殊なケースにぶつかってしまった。 :/

+0

あなたが投稿した文字列で、現在動作しており、フィールドの検証中です。 多くのありがとうございます。 – Mkgl

2

あなたは、文字クラス内のバックスラッシュは必要ありませんありがとうございました。 [.- ]は「.の間の任意の文字」と解釈されるため、スペースとダッシュがスペースを入れ替えていることにも注意してください。