我有一个正则表达式模式,它给我带来了一些问题:
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';
}