我有这个正则表达式模式,导致我一些问题:
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行,所以我没有发布它 - 让我知道你是否需要全部。
答案 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';
}