正则表达式验证包括HTML编码字符

时间:2013-01-22 10:54:07

标签: php regex

我正在尝试验证字符串(PHP& Regex),我希望选项A成功验证,但选项B根本不验证:

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


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

到目前为止,我有这个:

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

除了HTML编码的子字符串&lt;和&gt;在这个阶段,我正在用它打砖墙,任何帮助都非常感激。

基本上,除了我现有的与我的特殊字符匹配的正则表达式之外,我还需要能够匹配其中任何一个的确切子串。或者&gt;但不符合&amp;要么 ;他们自己的角色。

由于我正在使用的代码中存在限制,我无法在验证数据之前对数据进行解码...

1 个答案:

答案 0 :(得分: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