在任何人开火之前,我想说我已经尝试了所有解决方案,以及谷歌,但没有任何作用:(。我需要一些启示:)
这是我的自定义form_validation
回调函数。
代码段
function _check_valid_text($text_string)
{
if(empty($text_string)) return TRUE;
if(!preg_match("/^[\pL\pN_ \w \-.,()\n]+$/i", $text_string))
{
// Set the error message:
$this->form_validation->set_message('_check_valid_text', 'Invalid Character or symbol');
return FALSE;
}
return TRUE;
}
我想要什么:
奇怪
für
有效,即没有错误(YAY!)。
trägen
没有:(
有人可以告诉我哪里出错了吗?
PS:请不要提供解决方案,解决方案是将未被识别的字符包含在preg_match
字符串中(例如将ä
添加到字符串中)。我正在寻找一种有效的通用解决方案。
PPS 我想向社区提出建议。对于各种案件,library of regex expressions
怎么样?一个人可以写一个正则表达式,一旦其他人验证它正在工作,它就可以被接受。只是一个建议。我认为像我这样的新人在regex-hell
:{/ p>>中遇到了很多困难
答案 0 :(得分:2)
您必须添加 u 修饰符以通知正则表达式引擎必须将您的字符串视为unicode字符串。另请注意,您可以减少角色类,例如:
$subjects = array('Wer nur den lieben Gott läßt walten',
'Sei gegrüßet Jesu gütig',
'Komm, Gott, Schöpfer, Heiliger Geist',
'←↑→↓');
$pattern = '~^[\pL\pN\s,.()_-]++$~u';
foreach ($subjects as $subject) {
if (preg_match($pattern, $subject, $match))
echo '<br/>True';
else
echo '<br/>false';
}
答案 1 :(得分:0)
没有通用的解决方案可以解决这个问题,因为不存在满足您需求的预定义字符集。
但是,您可以添加重音字符范围。
[ ,-\.0-9A-Za-z\{\}À-ž]
另外,有关与特定字符集匹配的信息,请参阅How to allow utf-8 charset in preg_match?。