如何将没有两个连字符的字符串与 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 数字的正则表达式上的努力。