-1

我正在尝试为一些 javascript 代码编写一个正则表达式,该代码接受用户输入的手机号码,并在一个正则表达式中执行以下检查:

  1. 从 07 开始
  2. 仅包含数字、空格或破折号
  3. 正好包含 11 个数字

这是否可以只用一个正则表达式来完成,如果可以,请问如何?

4

3 回答 3

0

由于@Vivin 提出了挑战:

 /^07([-\s]*\d){9}[-\s]*$/
  • ^07: 以数字 07 开头
  • (: 开始组
  • [-\s]*: 任意数量的 - 或空格
  • \d: 正好一位数
  • ){9}: 本组正好 9 份(11 位数,包括 07)
  • [-\s]*:可选的尾随空格或 -
  • $: 字符串结束

当然更有用的方法可能如下

 if ((telNo = telNo.replace (/[-\s]+/g, '')).match (/^07\d{9}$/)) {
    ....
 }

它的优点(?)只留下数字telNo

于 2013-07-12T16:10:06.160 回答
0

我认为使用一个正则表达式是不可能的,但可以通过测试两个条件来实现:

if(/^07[\d\- ]+$/.test(str) && str.replace(/[^\d]/g, "").length === 11) {
   //string matches conditions
}

正则表达式的解释:

  • ^:锚,意思是“匹配字符串的开始”。
  • 07: 匹配字符串07。与上述一起,这意味着该字符串必须以 . 开头07
  • [:字符类的开始,即我们希望允许的一组字符
  • \d: 匹配一个数字(相当于0-9)。
  • \-
  • “”:匹配空格(markdown 不允许我将单个空格显示为代码)
  • ]: 字符类结束。
  • +: 前面的一个或多个。
  • $:锚,意思是“匹配字符串的结尾”。与 一起^,这基本上意味着此正则表达式必须适用于整个字符串。

因此,在这里我们检查字符串是否与一般格式匹配(以数字、破折号或空格开头07并且仅包含数字、破折号或空格),并且我们还确保字符串内总共有 11 个数字。我们通过获取任何不是数字的内容然后检查字符串的长度是否等于 11 来做到这一点。

于 2013-07-12T15:55:07.083 回答
0

谢谢大家的尝试,但是在尝试了不同的想法之后,我终于找到了一个有效的“单一”正则表达式:

07((?:\s|-)*\d(?:\s|-)*){9}

这确保它以 07 开头,仅包含数字、空格或破折号,并且其中只有 11 个(9 加上前 2 个)是数字。

很抱歉浪费了您的时间。

解释:

()   - include in capture    
(?:) - do not include in capture
\s   - whitespace
|    - or
-    - dash
*    - zero or more
\d   - digits only
{9}  - exactly nine of what is captured
于 2013-07-12T16:30:56.747 回答