一个正则验证需求

1)以数字,逗号,"-"三个符号组成
2)以数字开头和结尾.
3)"-"前后必须是数字

[b]两个表达式,逻辑比较简洁、易懂:[/b]

var reg = /^\d[,\d-]*\d$/g;
var reg1 = /\D-|-\D/; // 发现包含有“-”且其前后不为数字

var str = "11,1,1-11341131";

alert(reg.test(str) && !reg1.test(str))

[b]方案二,一个表达式,逻辑稍复杂:[/b]

下面就一个表达式展开推导分析:

首先,要让包含有“-”字符时,其前后必须为数字,这个很简单:
var reg = /^\d(,|\d|\d-\d)*\d$/g;

但是“-”字符与首字符或尾字符数字相接就无法通过验证,但其符合条件,
先解决“-”与尾字符数字相接,也很简单,先前瞻一下:
var reg = /^\d(,|\d|\d-(?=\d))*\d$/g;

那后瞻呢?其实本例的情况比较简单,解决首字符数字与“-”相接就行:
var reg2 = /^\d(-(?=\d))?(,|\d|\d-(?=\d))*\d$/g;

ok,因为“-”前后总是需要前后伴随数字,你甚至可以合并一下:
var reg2 = /^\d(-(?=\d))?(,|\d(-(?=\d))?)*\d$/g;


js不像.net及其他一些语言内置了那么多正则方法,
不支持后瞻(零宽度正(负)回顾后发断言)(?<=exp)(?<!exp),
只支持前瞻(零宽度正(负)预测先行断言)(?=exp)(?!exp)
在某些情况下,你可以使用一些技巧来实现类似的后瞻应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值