我正在尝试使用Javascript验证邮政编码范围,并使用正则表达式为方法提供特定于国家的验证规则的框架。
是否有一种方法来验证(使用regex match/test/任何其他js regex函数)范围分隔符两边的字符数是否相同(在本例中为冒号)?
例如,85001:85255
或A9A 9AA:A9A 9ZZ
是有效的(双方都有相同的字符数)
但是,85001:255
或A9A 9AA:9ZZ
无效(x:y中的字符数与y中的字符数不同)
谢谢
发布于 2013-10-13 02:32:57
正则表达式的一个范例是它们无法计数。
但是,如果你知道一个侧面的字符数的最大长度,你就可以像这样“黑”它。假设最大长度为4:
var code = '8500:1234';
/\b((.:.)|(..:..)|(...:...)|(....:....))\b/.test(code)
如果您不想手工编写它,您可以像这样生成regexp:
var max_length = 6;
var delimiter = ':';
var regexp = [];
for (var i=1; i<=max_length; ++i) {
var side = '';
for (var j=1; j<=i; ++j) {
side += '.';
}
regexp.push('(' + side + delimiter + side + ')');
}
regexp = '\b(' + regexp.join('|') + ')\b';
regexp = new RegExp(regexp);
发布于 2013-10-13 02:38:50
这里,@tak3r推荐的RegExp版本稍微少了一点。
var r = /^(.{1}:.{1}|.{2}:.{2}|.{3}:.{3}|.{4}:.{4}|.{5}:.{5}|.{6}:.{6}|.{7}:.{7})$/
发布于 2013-10-13 02:30:07
您可以简单地拆分令牌并比较长度:
var range = "123:567";
var tokens = range.split(":");
var valid = tokens[0].length === tokens[1].length;
https://stackoverflow.com/questions/19341194
复制相似问题