1

重複の可能性:
php-正規表現-PCREは\ L、\ l、\ N、\ P、をサポートしていません

私は機能を持っています

public function valid_city_state($data)
{
    $data = trim($data);

    if(!$data)
    {
        return TRUE;            
    }

    $valid = preg_match("/^[a-zA-Z\u0080-\u024F\s\/\-\)\(\`\.\"\']+$/",trim($data));

    if(!$valid)
    {
        $this->form_validation->set_message('valid_city_state', 'Please enter a valid %s.');
        return FALSE;           
    }
    else
    {
        return TRUE;
    }       
}

正規表現があります

$valid = preg_match("/^[a-zA-Z\u0080-\u024F\s\/\-\)\(\`\.\"\']+$/",trim($data));

実行すると、次のエラーが発生します

A PHP Error was encountered

Severity: Warning

Message: preg_match() [function.preg-match]: Compilation failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 9

Filename: home/auth.php

Line Number: 1632

いくつかの例を見ましたが、必要なものを得ることができませんでした

php-正規表現-PCREは\L、\ l、\ N、\ P、をサポートしていません

http://www.sitepoint.com/forums/showthread.php?748713-Preg-match-with-php-PCRE-error

助けてください 。前もって感謝します 。

アップデート

この通常の表現はjavascriptで正常に機能します

4

3 に答える 3

8
$valid = preg_match("/^[a-zA-Z\x{0080}-\x{024F}\s\/\-\)\(\`\.\"\']+$/u",trim($data));

usをsに切り替え、x16進数をのように中かっこで囲み{0080}、末尾のuフラグも追加します。

于 2012-04-23T13:54:59.477 に答える
1

PCREは\uをサポートしていないため、おそらく/^[a-zA-Z\x{0080}-\x{024F}\s\/\-\)\(\。\ "\'] + $ /`です。これは、\p{XXXX}などの代替シンタックスです。

于 2012-04-23T13:53:03.840 に答える
1

二重引用符を使用する場合は、エスケープシーケンスに注意してください。あなたのコードで。

$valid = preg_match("/^[a-zA-Z\u0080-\u024F\s\/\-\)\(\`\.\"\']+$/",trim($data));

また、PHPのエスケープシーケンスとPCREパターンのエスケープシーケンスの両方があると、少し混乱します。どれどれ、

最後の$は無効です。'\$'を使用する必要があります。(脱出するときは$になります)。

使用する必要のある「ドット」を含める場合\\\.(文字列として貼り付けた後\.、PCRE用になります。PCREは再びエスケープして「ドット」文字になります。それ以外の場合.、PCREのみの場合は任意の文字を意味します。

preg_match関数を使用すると、混乱する可能性があります。double-qouteの代わりにqouteを使用することをお勧めします。したがって、パターン内では、引用符のシーケンスをエスケープするだけで心配できます。

于 2012-04-23T14:07:10.930 に答える