0

文字列 (PHP & Regex) を検証しようとしています。オプション A は正常に検証されますが、オプション B はまったく検証されません。

a) fsadgfsd!^_-@<>&lt; 
            OR
   fsadgfsd!^_-@<>&gt;&lt;


b) fsadgfsd!^_-@<>&; 
          OR 
   fsadgfsd!^_-@<>;&&;

これまでのところ、私はこれを持っています:

/^[a-zA-Z0-9 \!\^\_\@\<\>-]+$/

< と > の HTML エンコードされた部分文字列を除いて、すべてを検証しています。この段階でレンガの壁にぶつかっています。どんな助けも大歓迎です。

基本的に、特殊文字に一致する既存の正規表現に加えて、 < または > の正確な部分文字列に一致する必要がありますが、 & または ; には一致しません。独自のキャラクター。

私が使用しているコードの制限により、データを検証する前にデコードできる立場にありません...

4

1 に答える 1

1
$regex = '/^[\w !\^@<>-]+$/';


$string = 'fsadgfsd!^_-@<>&gt;&lt;';
$string = html_entity_decode($string);
if (preg_match($regex, $string))
    echo 'ok';
// echo ok


$string = 'fsadgfsd!^_-@<>;&&;';
$string = html_entity_decode($string);
if (preg_match($regex, $string))
    echo 'ok';
// echo nothing

\w は [a-zA-Z0-9_] のショートカットです

編集: html_entity_decode なし

$regex = '/^([\w !\^@<>-]*(&[glt]+;)*)+$/';


$string = 'fsadgfsd!^_-@<>&gt;&lt;';
if (preg_match($regex, $string))
    echo 'ok';
// echo ok
echo '-------------';

$string = 'fsadgfsd!^_-@<>;&&;';
if (preg_match($regex, $string))
    echo 'ok';
// echo nothing
于 2013-01-22T11:00:13.073 に答える