2011-08-15 25 views
0

は、私はアルファベット、数字、スペースと以下の記号で任意の文字を許可したいですよ! £$%& *()_ + []:; @〜#<>? 、。 -正規表現ヘルプ私は、ユーザからの入力を検証するために正規表現を使用しようとしている識別記号

私はそれが私の地獄を混乱させるので、正規表現でそれほど良いことはありません。これは私が持っている最高ですが、私はそれを置く場合は正常に動作していないのですか?フィールドで私はエラーを受け取ります。

<?php 
    $title = $_POST['title']; 

    if (!preg_match('/\/^[a-zA-Z0-9\s!£$%&*()_+[\]:;@~#<>?,.-]+$\//m', $title)) { 
     $error = "Photo name contains unsafe characters."; 
     $solution = "<a href=\"javascript:history.go(-1)\">Try again?</a>"; 
    } 

    if ($error) { echo("$error"); 
?> 

なぜ私は私が理解し始めていると思うちょうどその時、私はすぐに私は本当にないんだけど実現し、私は常にこれらの正規表現物事が間違って取得しています! :P

誰かが私を助けて、私の例がうまくいかない理由を説明できたら、間違いから学ぶことができます。とても感謝します。

preg_match('/^[a-zA-Z0-9\s!£$%&*()_+[\]:;@~#<>?,.-]+$/m', $title) 

またm修飾子は$が行末にマッチさせ、そして誰かがいずれかを追加することができます:あなたは、^と$の後に、この1つは動作するはずの前にいくつかの余分な/を持って

答えて

1

最初の行の後に文字があるので、それを削除する必要があります。

+0

ああ、うまくいきます!ありがとうございました!ですから、m修飾子を使用すると、それを削除する必要があります。 preg_match( '/^[a-zA-Z0-9 \ s!£$%&*()_ + [\]:; @〜#<>? - ] + $/'、$ title); ?そして、なぜ私が理解しているかを確かめるためには、$が正規表現チェックを止めてから何も挿入することができない最初の行の後に、テキストエリアに書いて、新しい段落を作成したらどうなるでしょうか?これは、1行しか書き込めない単一のテキスト入力フィールドにも対応していますか?段落/複数の行を作るためにこれを「ハッキングする」ことができますか?申し訳ありませんが、もし私が誤解しても、まだ学んで:) – Joe

+1

はい、最初の質問です。 'm'の場合、通常' $ 'は文字列の終わりと一致するので、'/^ ... $/'正規表現は文字列全体が正規表現とマッチする場合にのみマッチします。しかし、 'm'の場合、' $ 'は行の終わりにマッチするので、文字列全体の一行が正規表現とマッチすると'/^ ... $/m'正規表現がマッチします。 – arnaud576875

+0

したがって、ユーザー名やこの場合はアップロードされた写真のタイトルを確認するなどの大半の場合、文字列をチェックしているだけでmは必要ありません。これはすでに/^$/ – Joe

関連する問題