PHP模式匹配文字单引号

时间:2014-09-23 15:57:48

标签: php regex

我有这个正则表达式模式,导致我一些问题:

preg_match('/^[A-Za-z_\'\$\, ]{3,}$/',  $value);

由于某种原因,此模式不允许单引号(')字符返回true。

dog返回true

'dog'返回false - 但应该返回true

我进行了相当广泛的搜索,但到目前为止,我没有看到任何可以解释这一点的内容。

-

根据要求编写代码:

if (!preg_match('/^[A-Za-z_\'\$\, ]{3,}$/', $field['php_population']) && !empty($field['php_population'])) {
                $e['errors']['php_population'] = 'long winded error message';
}

它所使用的方法是70-80行,所以我没有发布它 - 让我知道你是否需要全部。

1 个答案:

答案 0 :(得分:1)

<?php
echo preg_match('/^[A-Za-z_\'\$\, ]{3,}$/',"'dog'"); # <= return 1
echo preg_match('/^[A-Za-z_\'\$\, ]{3,}$/',urlencode("'dog'")); # <= return 0 as it test to %27dog%27
echo preg_match('/^[A-Za-z_\'\$\, ]{3,}$/',"dog"); # <= return 1
echo preg_match('/^[A-Za-z_\'\$\, ]{3,}$/',"'#dog'"); # <= return 0
?>

您的代码运行正常。我怀疑你的$field['php_population']被urlencoded并且单引号被%27替换,这与你的正则表达式不匹配。我会尝试:

if (!preg_match('/^[A-Za-z_\'\$\, ]{3,}$/', urldecode($field['php_population'])) && !empty($field['php_population'])) {
                $e['errors']['php_population'] = 'long winded error message';
}