Javascript 测试字符串是否只有一个字符,在中间正则表达式中有或没有空格

Javascript 测试字符串是否只有一个字符,在中间正则表达式中有或没有空格,javascript,regex,Javascript,Regex,我有这个正则表达式 `^([0-9]{2}|[0-9]{3}\s?[0-9]{3})\s?((?!(.)\3{7}))([0-9]{4}\s?[0-9]{4}$)` 以下是场景: 12 1234 1234->必须匹配 12 1111 1111->无法匹配 12 12341234->必须匹配 12 11111111->无法匹配 我找不到解决这个问题的方法如果两组4位数字不存在相同的数字,您可以使用一个反向前瞻,使用一个交替选项,该选项将匹配对组1的反向引用或空白字符 ^[0-9]{2}\s([0

我有这个正则表达式

`^([0-9]{2}|[0-9]{3}\s?[0-9]{3})\s?((?!(.)\3{7}))([0-9]{4}\s?[0-9]{4}$)`
以下是场景:
12 1234 1234->必须匹配
12 1111 1111->无法匹配
12 12341234->必须匹配
12 11111111->无法匹配


我找不到解决这个问题的方法

如果两组4位数字不存在相同的数字,您可以使用一个反向前瞻,使用一个交替选项,该选项将匹配对组1的反向引用或空白字符

^[0-9]{2}\s([0-9])(?!(?:\1|\s)+$)[0-9]{3}\s?[0-9]{4}$
解释

  • ^
    字符串的开头
  • [0-9]{2}\s
    匹配2位数字和空格字符
  • ([0-9])
    捕获组1,匹配第一组4位中的第一位
  • (?!
    负前瞻,断言右边的不是
    • (?:\1 |\s)+$
      使用对组的反向引用或空白字符匹配相同的数字
  • 关闭前瞻
  • [0-9]{3}\s?[0-9]{4}
    匹配3位数字、可选空白字符和4位数字
  • $
    字符串结尾


在图案的开头使用交替,可能还匹配2乘以3的数字:

^(?:[0-9]{2}|[0-9]{3}\s?[0-9]{3})\s([0-9])(?!(?:\1|\s)+$)[0-9]{3}\s?[0-9]{4}$

如果两组4位数字不应该存在相同的数字,您可以使用一个替代的负前瞻,该替代将匹配对组1的反向引用或空白字符

^[0-9]{2}\s([0-9])(?!(?:\1|\s)+$)[0-9]{3}\s?[0-9]{4}$
解释

  • ^
    字符串的开头
  • [0-9]{2}\s
    匹配2位数字和空格字符
  • ([0-9])
    捕获组1,匹配第一组4位中的第一位
  • (?!
    负前瞻,断言右边的不是
    • (?:\1 |\s)+$
      使用对组的反向引用或空白字符匹配相同的数字
  • 关闭前瞻
  • [0-9]{3}\s?[0-9]{4}
    匹配3位数字、可选空白字符和4位数字
  • $
    字符串结尾


在图案的开头使用交替,可能还匹配2乘以3的数字:

^(?:[0-9]{2}|[0-9]{3}\s?[0-9]{3})\s([0-9])(?!(?:\1|\s)+$)[0-9]{3}\s?[0-9]{4}$

因此,您正在测试字符串的第二部分,检查2、4个字符的单词是否包含重复字符,以及单词之间是否有空格?仅此而已。问题是当我比较1111+(空格)和1111时,它不会因为空格而触发,我不知道如何摆脱它你是说这样吗<代码>^[0-9]{2}([0-9])(?!(?:\1})+$)[0-9]{3}?[0-9]{4}$就是这样!完美的因此,您正在测试字符串检查的第二部分,如果2,4个字符的单词包含重复字符,那么单词之间可能有空格,也可能没有空格?就是这样。问题是当我比较1111+(空格)和1111时,它不会因为空格而触发,我不知道如何摆脱它你是说这样吗<代码>^[0-9]{2}([0-9])(?!(?:\1})+$)[0-9]{3}?[0-9]{4}$就是这样!完美的你在评论中输入的是完美的解决方案,无论如何,我会投票支持你的努力!你在评论中输入的是完美的解决方案,无论如何,我会投票支持你的努力!