帐号的正则表达式,只接受数字和连字符

时间:2017-10-04 03:20:24

标签: regex

帐号应以数字开头,以数字结尾。在数字内,连字符被接受。注意连字符不应重复( - ,---等)。 现在我可以验证示例1-4,如何处理案例5-6?

^[0-9][0-9\-]*[0-9]$


例如

1。 324324-324324-23432是正确的

2。 -2342343-2432-3214324为FALSE

3。 324324-324324-是假的

4。 3dsfsdf4324-324-324为FALSE

5。 324324--324324-是假的

6。 324324--3243-24是假的

3 个答案:

答案 0 :(得分:0)

您可以使用否定先行断言。

^[0-9](?:[0-9]|-(?!-))*[0-9]$

(?:)是非捕获组。在其中我们接受一个数字,或者我们接受-(?!-),这意味着连字符后面没有连字符。

请注意,并非所有正则表达式引擎都支持超前断言,但大多数都支持。

如果您使用的引擎不支持负前瞻断言,您也可以使用正则表达式来指定每个连字符必须跟一个数字。

^[0-9](?:-?[0-9])*$

这个与之前的匹配确实有一个区别,就是这个将接受一个数字(例如3)作为输入,但另一个需要至少两位数。

答案 1 :(得分:0)

^\d?(?:\d{1,}\-{1})*\d+$/

您也可以使用它。

答案 2 :(得分:-1)

var input = `
324324-324324-23432
324324-324324-23432-11111
-2342343-2432-3214324
324324-324324-
3dsfsdf4324-324-324
324324--324324-
324324--3243-24
`;

console.log( input.match(/^[0-9]{5,}-[0-9]{5,}-[0-9]{5,}$/gm) )