Codeigniter表单验证-使用允许重音的正则表达式自定义回调


Codeigniter Form Validation - Custom callback with regex that allows accents

在任何人攻击我之前,我想说我已经在SO和google上尝试了所有的解决方案,但没有任何效果:(我需要一些启发:)

这是我自定义的form_validation回调函数。

<<p> 代码片段/strong>
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;
}

我要的:

  1. 允许所有字母数字字符[a-z, a-z &0 - 9]
  2. 允许口音
  3. 也允许以下字符:空格、左大括号、右大括号、破折号、句号和逗号
奇怪的

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 = '~^['pL'pN's,.()_-]++$~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字符集?有关与特定字符集匹配的信息。