Javascript 可以使用子查询生成正则表达式

Javascript 可以使用子查询生成正则表达式,javascript,regex,Javascript,Regex,我试图为一段javascript代码编写一个正则表达式,该代码接受用户输入的手机号码,并在一个正则表达式中执行以下检查: 从07开始 仅包含数字、空格或破折号 正好包含11个数字 仅在一个正则表达式中就可以做到这一点吗?如果可以,请怎么做?我认为一个正则表达式不可能做到这一点,但通过测试两个条件就可以做到: if(/^07[\d\- ]+$/.test(str) && str.replace(/[^\d]/g, "").length === 11) { //string m

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

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

  • 仅在一个正则表达式中就可以做到这一点吗?如果可以,请怎么做?

    我认为一个正则表达式不可能做到这一点,但通过测试两个条件就可以做到:

    if(/^07[\d\- ]+$/.test(str) && str.replace(/[^\d]/g, "").length === 11) {
       //string matches conditions
    }
    
    正则表达式的解释:

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

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

    因为@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中的数字谢谢大家的尝试,但是在尝试了很多不同的想法之后,我终于找到了一个有效的“单一”正则表达式:

    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
    

    是的,这是可能的。如何将数字格式化为空格或破折号?我不太清楚您的意思,但我们的用户有时会将数字设置为07123 456789或07123-456789,甚至07123 456-789,因此我必须始终处理所有这些情况,同时确保数字的计数准确无误。请对否决票进行任何解释?如果给出解释,我很乐意更正。这在'07-12345678'上失败,但可能您的用户不使用该格式?非常好!我已经更新了答案以适应这种情况。