Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式:匹配特定格式但不包含特定值_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式:匹配特定格式但不包含特定值

Javascript 正则表达式:匹配特定格式但不包含特定值,javascript,regex,Javascript,Regex,我想验证一个值是否是一个移动电话号码,同时与一个特定的移动电话号码不匹配 例如,该值的长度应为7或8个数字,但不应为01010101 12346789(0) 1234323(0) 01010101(x) 0101010(0) 需要某种类型的AND运算符,但我似乎找不出合适的形式 下面是一个失败的方法 /^(?=\d{7,8}))(?!(01010101))$/ 编辑:这个正则表达式将在Javascript中使用。在将结束锚($)移动到断言括号之前,您的正则表达式永远不会匹配任何字符串。下面

我想验证一个值是否是一个移动电话号码,同时与一个特定的移动电话号码不匹配

例如,该值的长度应为7或8个数字,但不应为01010101

  • 12346789(0)
  • 1234323(0)
  • 01010101(x)
  • 0101010(0)
需要某种类型的AND运算符,但我似乎找不出合适的形式

下面是一个失败的方法

/^(?=\d{7,8}))(?!(01010101))$/

编辑:这个正则表达式将在Javascript中使用。

在将结束锚(
$
)移动到断言括号之前,您的正则表达式永远不会匹配任何字符串。下面的正则表达式可以简单地断言位置,它不捕获任何值

/^(?=\d{7,8}$)(?!01010101$)/

使用以避免该特定模式

/^(?!01010101$)\d{7,8}$/


其中
\d{7,8}
将匹配长度
7
8
的任何数字组合,并且为了避免从一开始就无法匹配的
01010101
组合使用(
(?!01010101$)

^((?!01010101$)\d{7,8})$
此处演示:

解释:此正则表达式检查字符串是否包含7或8位数字,但在匹配的每一点上,它都会断言字符串不包含您不想匹配的数字
01010101

请注意,在Javascript中使用负前瞻似乎是完全可以接受的。例如,以下匹配将返回true:

/^((?!01010101$)\d{7,8})$/.test('1234567');
而以下内容将返回false:

/^((?!01010101$)\d{7,8})$/.test('01010101');

您的方法失败的原因是您试图匹配:
7-8位数字后接not 01010101

如果你想让正则表达式按照特定的顺序运行,你需要使用负lookback

^(\d{7,8})(?<!(01010101))$

或者,如果您正在使用并希望匹配多行,请删除“^”和“$”

,很抱歉,我不知道正则表达式因语言而异。我有一个错误,来自的JavaScript不支持lookbehind。您也可以执行^(?(01010101))(\d{7,8})$感谢您的演示。很抱歉,我要在Javascript中使用这个正则表达式。当我将模式更改为Javascript时,它不再有效。你认为还有别的方法吗?@HeeKyungYoon在JavaScript中使用负面前瞻没有什么错,q.v.我的最新答案。谢谢。正如我在上面的评论中提到的,很抱歉我没有解释我将在Javascript中使用这个正则表达式。你认为还有其他方法吗?@HeeKyungYoon:你说的另一种方法是什么?@HeeKyungYoon:JS支持向前看断言,而不支持向后看…当我在Javascript风格模式下测试
/^(?!01010101$)\d{7,8}$/
时,它不起作用。但是@Tim说它在Javascript中也能工作@Heekyungyouon:是的,它在JS中会起作用-
^(?!(01010101))(\d{7,8})$