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_rules如果您将(部分)模式更改为以下内容,它将起作用:

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

...然后将/u修饰符添加到实际使用的模式中preg_match

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

引用文档

u (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 回答
0

将正则表达式更改product_name为以下内容,这允许所有:

var $product_name_rules = '^.'
于 2012-11-23T01:21:03.150 回答