0

我正在尝试针对强加给我的以下正则表达式验证字符串:

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

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

  1. 首先,我对正则表达式的了解并不是那么好
  2. 我在正则表达式本身中看到特殊字符,我确信 PHP 不会对我直接插入字符串感到高兴(例如 $£¥€)

徒劳地希望我只是尝试将它粘贴到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";  
}

提前致谢!!

4

2 回答 2

1

你可以这样做:

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

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

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

于 2013-10-17T10:59:56.207 回答
1

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

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

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

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

    preg_match("/....../u", ...);
                        ^
                     add this
    

除此之外,你已经掌握了它。

于 2013-10-17T10:21:42.807 回答