PHP使用preg_match进行非常严格的复杂字符串验证

时间:2013-10-17 10:11:26

标签: php regex validation preg-match

我正在尝试根据强加于我的以下正则表达式验证字符串:

[-,.:; 0-9A-Z&@$£¥€'"«»‘’“”?!/\\()\[\]{}<>]{3}[-,.:; 0-9A-Z&@$£¥€'"«»‘’“”?!/\\()\[\]{}<>*=#%+]{0,157}

任何人都可以帮助在PHP中编写preg_match来验证输入字符串吗?我很挣扎,因为:

  1. 我对正则表达式的了解并不是那么好的
  2. 我在正则表达式中看到了特殊字符,我觉得PHP不会对我直接插入字符串感到高兴(例如$£¥€)
  3. 徒劳地希望我只是尝试将其粘贴到preg_match中,从而避免使用双引号:

    $ste = "Some string input";
    
    if(preg_match("/[-,.:; 0-9A-Z&@$£¥€'\"«»‘’“”?!/\\()\[\]{}<>]{3}[-,.:; 0-9A-Z&@$£¥€'\"«»‘’“”?!/\\()\[\]{}<>*=#%+]{0,157}/",$ste))
    {
        echo "OK";  
    }
    else
    {
        echo "Not OK";  
    }
    

    提前致谢!!

2 个答案:

答案 0 :(得分:1)

如果您执行以下操作,PHP将非常满意表达式中的“特殊”字符:

  1. 确保输入字符串使用UTF-8编码进行编码。

  2. 确保使用UFT-8编码保存您的PHP程序文件。 (显然你也需要在你的系统的所有其他部分使用UTF-8编码,否则你会在线上的某个地方显示出borked字符,但这超出了这个问题的范围)

    < / LI>
  3. 添加u修饰符添加到正则表达式模式字符串的末尾,以告诉正则表达式解析器处理UTF-8字符。即:

    preg_match("/....../u", ...);
                        ^
                     add this
    
  4. 除此之外,你已经非常了解它。

答案 1 :(得分:1)

你可以这样做:

if (preg_match('~^[ -"$&-),-<>?-\]{}£¥€«»‘’“”]{3}[ -\]{}£¥€«»‘’“”]{0,157}$~u', $ste))
    echo 'OK';
else
    echo 'Not OK';

我为unicode添加了“u”修饰符,并使用范围缩小了字符类的大小(例如:,-<表示,<之间的所有字符在unicode表中)

但最重要的是,我添加了锚点^$,分别意味着开始结束字符串。