我正在尝试为一些 javascript 代码编写一个正则表达式,该代码接受用户输入的手机号码,并在一个正则表达式中执行以下检查:
- 从 07 开始
- 仅包含数字、空格或破折号
- 正好包含 11 个数字
这是否可以只用一个正则表达式来完成,如果可以,请问如何?
我正在尝试为一些 javascript 代码编写一个正则表达式,该代码接受用户输入的手机号码,并在一个正则表达式中执行以下检查:
这是否可以只用一个正则表达式来完成,如果可以,请问如何?
由于@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
我认为使用一个正则表达式是不可能的,但可以通过测试两个条件来实现:
if(/^07[\d\- ]+$/.test(str) && str.replace(/[^\d]/g, "").length === 11) {
//string matches conditions
}
正则表达式的解释:
^
:锚,意思是“匹配字符串的开始”。07
: 匹配字符串07
。与上述一起,这意味着该字符串必须以 . 开头07
。[
:字符类的开始,即我们希望允许的一组字符\d
: 匹配一个数字(相当于0-9
)。\-
:]
: 字符类结束。+
: 前面的一个或多个。$
:锚,意思是“匹配字符串的结尾”。与 一起^
,这基本上意味着此正则表达式必须适用于整个字符串。因此,在这里我们检查字符串是否与一般格式匹配(以数字、破折号或空格开头07
并且仅包含数字、破折号或空格),并且我们还确保字符串内总共有 11 个数字。我们通过获取任何不是数字的内容然后检查字符串的长度是否等于 11 来做到这一点。
谢谢大家的尝试,但是在尝试了不同的想法之后,我终于找到了一个有效的“单一”正则表达式:
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