3

誰かが私を炎上させる前に、ここですべてのソリューションをSOとGoogleで試しましたが、何も機能しませんでした:(.私はいくつかの啓発が必要です:)

これが私のカスタム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;
}

私が欲しいもの:

  1. すべての英数字を許可 [az、AZ、および 0-9]
  2. アクセントを許可する
  3. 次も許可します: スペース、左中括弧、右中括弧、ダッシュ、ピリオド、カンマ

奇妙なことに

fürつまり、エラーはありません (YAY!)。 trägenではない :(

誰かが私が間違っているところを教えてもらえますか?

PS:解決策が文字列に認識されていない文字を含めることである解決策を提供しないでくださいpreg_match(たとえば、文字列に追加äします)。機能する一般的なソリューションを探しています。

PPSコミュニティに提案したい。library of regex expressions色々な場合に備えてはいかがでしょうか?正規表現を書くことができ、他の誰かがそれが機能していることを確認したら、それを受け入れることができます。ただの提案ですが。ここには、私のように行き詰まる初心者がもっといると思いますregex-hell:)

4

2 に答える 2

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';
}
于 2013-06-20T15:02:34.067 に答える