Regex for Mobile Number Validation

前端 未结 3 1831
别那么骄傲
别那么骄傲 2020-12-05 02:38

I want a regex for mobile number validation. The regex pattern should be such that it must accept + only in beginning and space(or -) should be al

相关标签:
3条回答
  • 2020-12-05 03:20

    Try this regex:

    ^(\+?\d{1,4}[\s-])?(?!0+\s+,?$)\d{10}\s*,?$
    

    Explanation of the regex using Perl's YAPE is as below:

    NODE                     EXPLANATION
    ----------------------------------------------------------------------
    (?-imsx:                 group, but do not capture (case-sensitive)
                             (with ^ and $ matching normally) (with . not
                             matching \n) (matching whitespace and #
                             normally):
    ----------------------------------------------------------------------
      ^                        the beginning of the string
    ----------------------------------------------------------------------
      (                        group and capture to \1 (optional
                               (matching the most amount possible)):
    ----------------------------------------------------------------------
        \+?                      '+' (optional (matching the most amount
                                 possible))
    ----------------------------------------------------------------------
        \d{1,4}                  digits (0-9) (between 1 and 4 times
                                 (matching the most amount possible))
    ----------------------------------------------------------------------
        [\s-]                    any character of: whitespace (\n, \r,
                                 \t, \f, and " "), '-'
    ----------------------------------------------------------------------
      )?                       end of \1 (NOTE: because you are using a
                               quantifier on this capture, only the LAST
                               repetition of the captured pattern will be
                               stored in \1)
    ----------------------------------------------------------------------
      (?!                      look ahead to see if there is not:
    ----------------------------------------------------------------------
        0+                       '0' (1 or more times (matching the most
                                 amount possible))
    ----------------------------------------------------------------------
        \s+                      whitespace (\n, \r, \t, \f, and " ") (1
                                 or more times (matching the most amount
                                 possible))
    ----------------------------------------------------------------------
        ,?                       ',' (optional (matching the most amount
                                 possible))
    ----------------------------------------------------------------------
        $                        before an optional \n, and the end of
                                 the string
    ----------------------------------------------------------------------
      )                        end of look-ahead
    ----------------------------------------------------------------------
      \d{10}                   digits (0-9) (10 times)
    ----------------------------------------------------------------------
      \s*                      whitespace (\n, \r, \t, \f, and " ") (0 or
                               more times (matching the most amount
                               possible))
    ----------------------------------------------------------------------
      ,?                       ',' (optional (matching the most amount
                               possible))
    ----------------------------------------------------------------------
      $                        before an optional \n, and the end of the
                               string
    ----------------------------------------------------------------------
    )                        end of grouping
    ----------------------------------------------------------------------
    
    0 讨论(0)
  • 2020-12-05 03:28

    Satisfies all your requirements if you use the trick told below

    Regex: /^(\+\d{1,3}[- ]?)?\d{10}$/

    1. ^ start of line
    2. A + followed by \d+ followed by a or - which are optional.
    3. Whole point two is optional.
    4. Negative lookahead to make sure 0s do not follow.
    5. Match \d+ 10 times.
    6. Line end.

    DEMO Added multiline flag in demo to check for all cases

    P.S. You really need to specify which language you use so as to use an if condition something like below:

    // true if above regex is satisfied and (&&) it does not (`!`) match `0`s `5` or more times
    
    if(number.match(/^(\+\d{1,3}[- ]?)?\d{10}$/) && ! (number.match(/0{5,}/)) )
    
    0 讨论(0)
  • 2020-12-05 03:29

    This regex is very short and sweet for working.

    /^([+]\d{2})?\d{10}$/

    Ex: +910123456789 or 0123456789

    -> /^ and $/ is for starting and ending
    -> The ? mark is used for conditional formatting where before question mark is available or not it will work
    -> ([+]\d{2}) this indicates that the + sign with two digits '\d{2}' here you can place digit as per country
    -> after the ? mark '\d{10}' this says that the digits must be 10 of length change as per your country mobile number length

    This is how this regex for mobile number is working.
    + sign is used for world wide matching of number.

    if you want to add the space between than you can use the

    [ ]

    here the square bracket represents the character sequence and a space is character for searching in regex.
    for the space separated digit you can use this regex

    /^([+]\d{2}[ ])?\d{10}$/

    Ex: +91 0123456789

    Thanks ask any question if you have.

    0 讨论(0)
提交回复
热议问题