Difference between PHP regex and JavaScript regex

后端 未结 2 936
Happy的楠姐
Happy的楠姐 2021-01-12 04:20

Hi i want to use below php regex in spry java script framework but them doesn\'t work with spry framework and spry doesn\'t let the user to input!.
1)\"/^[\\d]+$/\

2条回答
  •  长发绾君心
    2021-01-12 04:52

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

    /u is not supported, since Javascript regexes only supports unicode in terms of codepoints. \x{???} (unicode codepoints) should be written \u???? in Javascript regex (always 4 digits 0 padded)

    In these cases, the following applies to the rest of the regex:

    • \s in Javascript is treated as unicode
    • \d isn't, which means only ASCII digits (0-9) are accepted.

    This means we specifically have to allow "foreign" numerals, e.g. Persian (codepoints 06F0-06F9):

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

    (Remove \d if ASCII digits shouldn't be accepted)

    Not sure what the brackets are supposed to be doing in example 1, originally they could be written:

    1) /^\d+$/
    

    But to add the Persian numerals, we need them, see above.

    Update

    Spry character masking, however, only wants a regex to be applied on each entered character - i.e., we can't actually do pattern matching, it's just a "list" of accepted characters in all places, in which case:

    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
    

    Once again, remove \d if you don't want to accept 0-9.

    Update 2

    Now... using regex for validation with 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"] }
         );
    

    A similar custom function can be made for case 3.

    See examples from Adobe labs

提交回复
热议问题