我想使用正则表达式代码验证文本框中的文本,其中用户将被允许带有符号( - )的6位数或10位数邮政编码的数字之间的任何位置我能够使用正确的数字限制/^(\d{6}|\d{10})$/
但无法应用可选符号
有人可以帮我解决这个问题。
答案 0 :(得分:1)
您可以先检查所需长度,然后检查内容。
/^ string start
(?=(.{7}|.{11})$) length check with positive look ahead
\d+-\d+ pattern check
$/ end of string
var test = [
'1',
'a',
'-',
'12',
'1245678901234567',
'1-23456',
'12-3456',
'123-456',
'1234-56',
'12345-6',
'12-345-6',
'12345-67890',
'foo-bar'
];
test.forEach(function (a) {
console.log(a, /^(?=(.{7}|.{11})$)\d+-\d+$/.test(a));
});
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
这个正则表达式使破折号可选:
var test = [
'12456789',
'12345678901',
'123456',
'1234567890',
'1-23456',
'12-34567890',
];
console.log(test.map(function (a) {
return a+' : '+/^(?:(?:(?=.{7}$|.{11}$)\d+-\d+)|\d{6}|\d{10})$/.test(a);
}));
答案 2 :(得分:0)