一个正则验证需求

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

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

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

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

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

方案二,一个表达式,逻辑稍复杂:

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

首先,要让包含有“-”字符时,其前后必须为数字,这个很简单:
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)
在某些情况下,你可以使用一些技巧来实现类似的后瞻应用

你可能感兴趣的:(JavaScript,.net,正则表达式,Blog,D语言)