PHP模式匹配文字单引号


PHP pattern matching a literal single quote

我有一个正则表达式模式,它给我带来了一些问题:

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

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

I.E

dog返回真实

'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行,所以我没有发布它——如果你需要全部,请告诉我。

<?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']是URL编码的,并且单引号被与您的正则表达式不匹配的%27替换。我会尝试:

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