我正在尝试根据强加于我的以下正则表达式验证字符串:
[-,.:; 0-9A-Z&@$£¥€'"«»‘’“”?!/\\()\[\]{}<>]{3}[-,.:; 0-9A-Z&@$£¥€'"«»‘’“”?!/\\()\[\]{}<>*=#%+]{0,157}
任何人都可以帮助在PHP中编写preg_match
来验证输入字符串吗?我很挣扎,因为:
徒劳地希望我只是尝试将其粘贴到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";
}
提前致谢!!
答案 0 :(得分:1)
如果您执行以下操作,PHP将非常满意表达式中的“特殊”字符:
确保输入字符串使用UTF-8编码进行编码。
确保使用UFT-8编码保存您的PHP程序文件。 (显然你也需要在你的系统的所有其他部分使用UTF-8编码,否则你会在线上的某个地方显示出borked字符,但这超出了这个问题的范围)
< / LI>添加u
修饰符添加到正则表达式模式字符串的末尾,以告诉正则表达式解析器处理UTF-8字符。即:
preg_match("/....../u", ...);
^
add this
除此之外,你已经非常了解它。
答案 1 :(得分:1)
你可以这样做:
if (preg_match('~^[ -"$&-),-<>?-\]{}£¥€«»‘’“”]{3}[ -\]{}£¥€«»‘’“”]{0,157}$~u', $ste))
echo 'OK';
else
echo 'Not OK';
我为unicode添加了“u”修饰符,并使用范围缩小了字符类的大小(例如:,-<
表示,
和<
之间的所有字符在unicode表中)。
但最重要的是,我添加了锚点^
和$
,分别意味着开始和结束字符串。