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