在任何人攻击我之前,我想说我已经在SO和google上尝试了所有的解决方案,但没有任何效果:(我需要一些启发:)
这是我自定义的form_validation
回调函数。
function _check_valid_text($text_string)
{
if(empty($text_string)) return TRUE;
if(!preg_match("/^[pLpN_ 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;
}
我要的:
- 允许所有字母数字字符[a-z, a-z &0 - 9]
- 允许口音
- 也允许以下字符:空格、左大括号、右大括号、破折号、句号和逗号
für
工作,即没有错误(耶!)。trägen
不:(
谁能告诉我我哪里错了?
PS:请不要提供解决方案,您的解决方案是包括未被识别到preg_match
字符串的字符(例如将ä
添加到字符串中)。我正在寻找一个通用的解决方案,工作。
PPS我想给社区提个建议。不同情况下的library of regex expressions
如何?一个人可以写一个正则表达式,一旦其他人验证它是有效的,它就可以被接受。只是一个建议。我想这里有更多像我这样的新手,他们在regex-hell
中被困住了:)
您必须添加u修饰符来通知regex引擎您的字符串必须被视为unicode字符串。还要注意,您可以减少字符类,例如:
$subjects = array('Wer nur den lieben Gott läßt walten',
'Sei gegrüßet Jesu gütig',
'Komm, Gott, Schöpfer, Heiliger Geist',
'←↑→↓');
$pattern = '~^[pLpNs,.()_-]++$~u';
foreach ($subjects as $subject) {
if (preg_match($pattern, $subject, $match))
echo '<br/>True';
else
echo '<br/>false';
}
没有通用的解决方案来处理这个问题,因为不存在满足您需求的预定义字符集。
但是,您可以添加重音字符范围。
[ ,-.0-9A-Za-z{}À-ž]
另外,参见如何在preg_match中允许utf-8字符集?有关与特定字符集匹配的信息。