首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript正则表达式以匹配范围两边的值的长度

Javascript正则表达式以匹配范围两边的值的长度
EN

Stack Overflow用户
提问于 2013-10-13 02:24:19
回答 6查看 224关注 0票数 1

我正在尝试使用Javascript验证邮政编码范围,并使用正则表达式为方法提供特定于国家的验证规则的框架。

是否有一种方法来验证(使用regex match/test/任何其他js regex函数)范围分隔符两边的字符数是否相同(在本例中为冒号)?

例如,85001:85255A9A 9AA:A9A 9ZZ是有效的(双方都有相同的字符数)

但是,85001:255A9A 9AA:9ZZ无效(x:y中的字符数与y中的字符数不同)

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-10-13 02:32:57

正则表达式的一个范例是它们无法计数。

但是,如果你知道一个侧面的字符数的最大长度,你就可以像这样“黑”它。假设最大长度为4:

代码语言:javascript
运行
复制
var code = '8500:1234';
/\b((.:.)|(..:..)|(...:...)|(....:....))\b/.test(code)

如果您不想手工编写它,您可以像这样生成regexp:

代码语言:javascript
运行
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2013-10-13 02:38:50

这里,@tak3r推荐的RegExp版本稍微少了一点。

代码语言:javascript
运行
复制
var r = /^(.{1}:.{1}|.{2}:.{2}|.{3}:.{3}|.{4}:.{4}|.{5}:.{5}|.{6}:.{6}|.{7}:.{7})$/
票数 2
EN

Stack Overflow用户

发布于 2013-10-13 02:30:07

您可以简单地拆分令牌并比较长度:

代码语言:javascript
运行
复制
var range = "123:567";

var tokens = range.split(":");

var valid = tokens[0].length === tokens[1].length;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19341194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档