PHP正则表达式和JavaScript正则表达式之间的区别

时间:2012-01-30 23:03:37

标签: php javascript regex

您好我想在spry java脚本框架中使用下面的php正则表达式但是它们不能用spry框架和spry不让用户输入!。
1)"/^[\d]+$/"
2)"/^([\x{600}-\x{6FF}]+\s)*[\x{600}-\x{6FF}]+$/u"
3)"/^([\x{600}-\x{6FF}]+\d*\s)*[\x{600}-\x{6FF}]+\d*$/u"
请帮我转换它们在spry框架中使用。

2 个答案:

答案 0 :(得分:8)

1) /^[\d]+$/
2) /^([\u0600-\u06FF]+\s)*[\u0600-\u06FF]+$/
3) /^([\u0600-\u06FF]+\d*\s)*[\u0600-\u06FF]+\d*$/

/ u不受支持,因为Javascript正则表达式仅支持代码点方面的unicode。 \ x {???}(unicode codepoints)应写成\ u ????在Javascript正则表达式(总是4位0填充)

在这些情况下,以下内容适用于正则表达式的其余部分:

    Javascript中的
  • \ s被视为unicode
  • \ d不是,这意味着只接受ASCII数字(0-9)。

这意味着我们必须特别允许“外国”数字,例如波斯语(代码点06F0-06F9):

1) /^[\d\u06F0-\u06F9]+$/
2) /^([\u0600-\u06FF]+\s)*[\u0600-\u06FF]+$/
3) /^([\u0600-\u06FF]+[\d\u06F0-\u06F9]*\s)*[\u0600-\u06FF]+[\d\u06F0-\u06F9]*$/

(如果不接受ASCII数字,则删除\ d)

不确定括号在示例1中应该做什么,最初可以写成:

1) /^\d+$/

但是要添加波斯数字,我们需要它们,见上文。

<强>更新

然而,

Spry字符屏蔽只需要在每个输入的字符上应用正则表达式 - 即,我们实际上不能进行模式匹配,它只是所有中接受字符的“列表”地方,在这种情况下:

1      ) /[\u06F0-\u06F9\d]/      // match 0-9 and Persian numerals
2 and 3) /[\u0600-\u06FF\d\s]/    // match all Persian characters (includes numerals), 0-9 and space

如果您不想接受0-9,请再次删除\。

更新2

现在......使用正则表达式进行验证与Spry:

var checkFullName = function(value, options)
{
   // Match with the by now well-known regex:
   if (value.match(/^([\u0600-\u06FF]+\s)*[\u0600-\u06FF]+$/))
   {
      return true;
   }
   return false;
}

var sprytextfield =
     new Spry.Widget.ValidationTextField(
          "sprytextfield", 
          "custom", 
          { validation: checkFullName, validateOn: ["blur", "change"] }
     );

可以为案例3制作类似的自定义功能。

请参阅examples from Adobe labs

答案 1 :(得分:2)

您是以字符串还是正则表达式对象传递它们?尝试删除&#34;正则表达式周围的字符。

&#39; u&#39;国旗有点棘手。您可能需要解释第2和第3个正则表达式正在尝试做什么。