我正在使用以下正则表达式^[\d]{4}[-]?[\d]{6}[-]?[\d]{4}$
来验证14个数字整体或分为
4 digits - 6 digits - 4 digits
以下四个示例匹配我的正则表达式,但我想排除最后两个示例。
1111-111111-1111
- (根据我的业务逻辑有效)12341234561234
- (根据我的业务逻辑有效)1111-111111111
- (我希望这是无效的)1111111111-1111
- (我希望这是无效的)您可以对您不想匹配的模式进行负向预测,并使用此正则表达式,
^(?!\d{4}-\d{10})(?!\d{10}-\d{4})\d{4}-?\d{6}-?\d{4}$
说明:
^
- >字符串的开头(?!\d{4}-\d{10})
- >否定前瞻以避免匹配此模式(?!\d{10}-\d{4})
- >否定前瞻以避免匹配此模式\d{4}-?\d{6}-?\d{4}
- >匹配你想要的模式$
- >字符串结尾我能想到的另一种模式,更简单,更优雅,你可以使用这个,
^\d{4}(-?)\d{6}\1\d{4}$
说明:
^
- >字符串的开头\d{4}
- >正好匹配四位数(-?)
- >匹配一个可选的连字符并在第1组中捕获\d{6}
- >正好匹配六位数\1
- >这确保了正则表达式中提到的两个连字符都存在或不存在\d{4}
- >正好匹配四位数$
- >字符串结尾只需使用或使用模式或14个数字。
var re = /^(\d{4}-\d{6}-\d{4}|\d{14})$/
function test(str) {
console.log(str, re.test(str))
}
['1234-123456-1234', '12341234561234',
'1234-1234561234', '1234123456-1234'].forEach(test)
^([\ d] {4} [ - ] [\ d] {6} [ - ] [\ d] {4}?)|([\ d] {16})$
希望这可以帮助!它有两个带有连字符的正则表达式,另一个带有整数(16位)