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 回答