嗨,我想在spry java脚本框架中使用以下php regex,但它们不适用于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框架中使用。

最佳答案

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

不支持/u,因为Java代码正则表达式仅在代码点方面支持unicode。\x {???}(unicode代码点)应写为\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,请再次删除\d。

    更新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

    关于php - PHP regex和JavaScript regex之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9072138/

    10-11 04:19