当前位置: 首页 > 知识库问答 >
问题:

用于移动号码验证的Regex

欧阳安阳
2023-03-14

我想要一个用于手机号码验证的正则表达式。regex模式必须只在开头接受,空格(或-)只能在国家代码之后(仅一次)。国家代码后只允许有10位数字。国家代码应该是可选的。如果国家代码不存在,它应该只接受10位数字。Regex应该防止任何无效的数字,比如(91 00000000000000000000)。

正则表达式应该接受这样的数字

  • 1 8087339090
  • 91 8087339090
  • 912 8087339090
  • 8087339090
  • 08087339090
  • 1-8087339090
  • 91-8087339090
  • 912-8087339090
  • 918087677876(国家代码(2位)10位手机号码)
  • 9108087735454(国家代码(3位数)10位数手机号码)

正则表达式不应该接受这样的数字

  • 51 874645(双连续)

共有3个答案

堵凯
2023-03-14

试试这个正则表达式:

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

使用Perl的YAPE对正则表达式的解释如下:

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
----------------------------------------------------------------------
祁绪
2023-03-14

这个正则表达式是非常短和甜蜜的工作。

Ex:910123456789或0123456789-

这就是移动号码的正则表达式的工作原理。
符号用于世界范围的号码匹配。

如果您想添加之间的空格,可以使用

在这里,方括号代表字符序列,空格是用于在正则表达式中搜索的字符
对于空格分隔的数字,可以使用此正则表达式

Ex:91 0123456789

如果有任何问题,请提问。

臧烨烁
2023-03-14

如果你使用下面的技巧,就可以满足你的所有要求

  1. ^行的开头
  2. A后接\d后接A-,这是可选的
  3. 第二点是可选的
  4. 负向前看以确保0s不跟随
  5. 匹配\d10次
  6. 线路结束

DEMO在DEMO中添加了multiline标志,以检查所有情况

P. S.你真的需要指定你使用的语言,以便使用一个if条件,如下所示:

// 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,}/)) )
 类似资料:
  • 我发现下面的regex可以验证多个电子邮件地址(逗号分隔)

  • 问题内容: 我正在创建用于密码验证的正则表达式,以在Java应用程序中用作配置参数。 regexp是: 密码策略为: 至少8个字符 包含至少一位数字 包含至少一个较低的alpha字符和一个较高的alpha字符 在一组特殊字符(@#%$^等)中包含至少一个字符 不包含空格,制表符等。 我只缺少第5点。我无法进行正则表达式检查空间,制表符,回车等。 有人可以帮我吗? 问题答案: 尝试这个: 说明: 由

  • 我是HTML,有谁能帮我验证一个电话号码只有'+'和数字值和电话号码不超过13个数字,并验证电子邮件与'@'和‘。我不想使用javascript

  • 我想弄清楚这个验证手机号码到我的Android系统是如何工作的。 我已经添加了代码和whant来验证46123456789,但最后一个号码(9)没有添加到电话号码中。 我用的是: 我是不是错过了什么

  • 问候覆花, 我试图编写一个正则表达式来验证形式为#########(10位)的电话号码,也就是说,这是有效的情况:1231231234或1111111。无效大小写是指小于10位或大于10位的数字串。 到目前为止,我使用的表达式是:“\d{10}” 不幸的是,它不能正确验证字符串是否为11位数。 有人知道实现这个任务的表达式吗?

  • 问题内容: 我在某些网站上找到了此代码,并且效果很好。它验证电话号码是以下格式之一: (123)456-7890 或 123-456-7890 问题是我的客户(我不知道为什么,也许是客户的东西)想添加另一种格式,即连续十个数字,如下所示: 1234567890 。 我正在使用这个正则表达式, 如何添加它还可以验证另一种格式?我对正则表达式不好。 问题答案: 首先,您的格式验证器显然仅适用于NANP