我需要验证包含范围的文本框字段(由-
分隔)。以下是要求:
0.5 - 3.11
的值用于表示5 months to 3 years and 11 months
-
分隔的两个部分可能包含也可能不包含1个空格(仅在连字符之前和之后)。1
2.3
2.3 - 4.6
2.3-4.6
2.4-2.1
无效我试图生成一些正则表达式,但最接近的是:
(0|([1-9][0-9]{0,9}))(\.[0-9]{1,2})?(-)(0|([1-9][0-9]{0,9}))(\.[0-9]{1,2})?
但它只能验证1.3-1.9
之类的值,但不会比较左右部分。并且只有一个数字值也未经过验证。
答案 0 :(得分:0)
您可以使用正则表达式执行大部分验证,但是检查第一个值是否小于第二个值必须在代码而不是正则表达式中完成。
function isRangeStringValid(r) {
if (!r.match(/(0|[1-9]\d*)\.(\d|1[01]) ?- ?(0|[1-9]\d*)\.(\d|1[01])/)) {
return false;
}
var y1 = parseInt(RegExp.$1);
var m1 = parseInt(RegExp.$2);
var y2 = parseInt(RegExp.$3);
var m2 = parseInt(RegExp.$4);
return (y1<y2 || (y1==y2 && m1<m2));
}
答案 1 :(得分:0)
另一个带有regexp for solution的变体函数
function israngev(r){
var res = r.match(/^\d+$|^\d+\.(\d|1[01])$|^(\d+\.(\d|1[01])) ?- ?(\d+\.(\d|1[01]))$/);
return res!=null &&
(!(res[1]||res[2]||res[4]) ||
(res[1]!=null ||
(res[4]-res[2]>0)))}