0

system/library の下の Cart.php には、名前の値にアラビア語を使用できない正規表現パターン定義があります。これは機能します:

$data = array(
  'id' => "221212",
  'qty' => 1,
  'price' => 21.2,
  'name' => 'dasdasdas'
);

しかし、名前にアラビア語が含まれているため、これは失敗します。

$data = array(
  'id' => "221212",
  'qty' => 1,
  'price' => 21.2,
  'name' => 'عمر'
);

Cart.php クラスで、次のことがわかりました。

// These are the regular expression rules that we use to validate the product ID and product name
  var $product_id_rules = '\.a-z0-9_-';
  // alpha-numeric, dashes, underscores, or periods
  var $product_name_rules = '\.\:\-_a-z0-9';
  // alphanumeric, dashes, underscores, colons or periods

名前のルールが気になります。後でチェックがあるため、明らかにこれが問題です。

if ( ! preg_match("/^[".$this->product_name_rules."]+$/i", $items['name'])) {
  log_message('error', 'An invalid name was submitted as the product name: '.$items['name'].' The name can only contain alpha-numeric characters, dashes, underscores, colons, and spaces');
  return FALSE;
}

名前規則の文字列をアラビア語に置き換えるにはどうすればよいですか? 私は正規表現のバックグラウンドが非常に低いので、助けてください。

ありがとう!

ここに画像の説明を入力

4

3 に答える 3

0

product_name正規表現を次のように変更します。これにより、すべてが許可されます。

var $product_name_rules = '^.'
于 2012-11-23T01:21:03.150 に答える
0

$product_name_rules(部分的な)パターンを次のように変更すると、機能します。

var $product_name_rules = '\.\:\-_a-z0-9\p{Arabic}';

/u... 次に、実際に使用されるパターンに修飾子を追加しpreg_matchます。

if ( ! preg_match("/^[".$this->product_name_rules."]+$/iu", 
            $items['name'])) { ... }

ドキュメントの引用:

う (PCRE_UTF8)

この修飾子は、Perl と互換性のない PCRE の追加機能をオンにします。パターン文字列は UTF-8 として扱われます。この修飾子は、UNIX では PHP 4.1.0 以降、win32 では PHP 4.2.3 以降で利用できます。PHP 4.3.5 以降、パターンの UTF-8 有効性がチェックされます。

于 2012-11-22T14:40:44.087 に答える
0

他の文字を受け入れたい場合は、カート ライブラリをロードした後に $this->cart->product_name_rules を変更する必要があります。

$this->load->library('cart');
$this->cart->product_name_rules = '\.a-z0-9_-\p{Arabic}';
于 2012-11-22T14:47:02.837 に答える