如何将没有两个连字符的字符串与 JavaScript 正则表达式匹配?
How to match string that does not have two hyphens with JavaScript regular expressions?
我有一个 JavaScript 正则表达式来匹配 phone 个数字:/^(?!-{2}).*[0-9\-]{10,20}[0-9]$/
。我希望它不匹配带有双连字符的字符串,但它匹配它们。
例如,9999-9999111999--9
匹配此正则表达式。我试图像这样 \-{2}
转义连字符,但仍然没有成功。这种行为的原因是什么?我错过了什么吗?
试试这个正则表达式:
/^(?!.*--).*[0-9\-]{10,20}[0-9]/
您要使用的否定前瞻是 ?!.*--
,它表示两个连续的连字符不会出现在您输入的任何位置。您当前的前瞻断言两个连字符没有按顺序出现在字符串的开头,但它在其他任何地方都没有这样的限制。
作为另一条评论,我质疑 .*
在您的模式开始时是否真的有意义。这对我来说似乎太开放了,几乎浪费了其他地方花在制作专注于某些 phone 数字的正则表达式上的努力。
我有一个 JavaScript 正则表达式来匹配 phone 个数字:/^(?!-{2}).*[0-9\-]{10,20}[0-9]$/
。我希望它不匹配带有双连字符的字符串,但它匹配它们。
例如,9999-9999111999--9
匹配此正则表达式。我试图像这样 \-{2}
转义连字符,但仍然没有成功。这种行为的原因是什么?我错过了什么吗?
试试这个正则表达式:
/^(?!.*--).*[0-9\-]{10,20}[0-9]/
您要使用的否定前瞻是 ?!.*--
,它表示两个连续的连字符不会出现在您输入的任何位置。您当前的前瞻断言两个连字符没有按顺序出现在字符串的开头,但它在其他任何地方都没有这样的限制。
作为另一条评论,我质疑 .*
在您的模式开始时是否真的有意义。这对我来说似乎太开放了,几乎浪费了其他地方花在制作专注于某些 phone 数字的正则表达式上的努力。