文字、数字、および次の文字を許可する正規表現を作成しようとして立ち往生しています:_-!?。、
これが私がこれまでに持っているものです:
/^[-\'a-zA-Z0-9_!\?,.\s]+$/ //not escaping the ?
そしてこのバージョンも:
/^[-\'a-zA-Z0-9_!\?,.\s]+$/ //attempting to escape the ?
これらのどちらも、以下に一致することはできないようです。
「ああ、なぜ、この正規表現が機能しないのですか!かなりイライラしますか?イライラします-つまり、控えめに言ってください。ちょっと見てください、アンダースコア_今回は一致するのでしょうか?」
誰かが私が間違っていることを指摘できますか?私のスクリプトはユーザー入力(この場合は引用符で囲まれた段落)を受け取り、すべての空白を削除して、実際の入力に空白がないことを指摘する必要があります。
ありがとう!
更新:Lixのアドバイスのおかげで、これは私がこれまでに持っているものです:
/^[-\'a-zA-Z0-9_!\?,\.\s]+$/
しかし、それはまだ機能していませんか?
UPDATE2わかりました、入力に基づいて、これが起こっていることです。ユーザーが文字列を入力し、次の関数を使用して文字列を実行します。
$comment = preg_replace('/\s+/', '',
htmlspecialchars(strip_tags(trim($user_comment_orig))));
したがって、最終的には、ユーザー入力はスペースを含まない文字列の長い文字列になります。次に、その文字列は次を使用して実行されます。
preg_match("@^[-_!?.,a-zA-Z0-9]+$@",$comment)
ここで問題を引き起こしている可能性があるのは何ですか?
最終更新:
この正規表現を使用することになりました:
"@[-'A-Z0-9_?!,.]+@i"
皆さんありがとう!笑、私の間違いがどこにあったかを見つけたら、あなたは私を殺すつもりです!
さて、私はこのコードを持っていました:
if(!preg_match($pattern,$comment) || strlen($comment) < 2 || strlen($comment) > 60){
もう!!!コードのstrlen部分をわざわざ見ることはありませんでした。もちろん、毎回失敗するでしょう...私は60文字しか許可しませんでした!!!!