使用正则表达式验证特定范围

Validate particular range using regex

本文关键字:范围 验证 正则表达式      更新时间:2023-09-26

我想要验证具有特定范围的文本框,其格式如下:

1-99 

我正在使用正则表达式:

/^(?:100|[1-9]'d|'d)-(?:100|[1-9]'d|'d)$/

对我有用,但没有什么问题,它接受这个:

55-50

不应该,这是错误的。

我该如何纠正此问题?

正如人们所说,早期正则表达式不是验证范围的方法。更好的方法是使用 if/else 语句。但是,您在使用正则表达式来验证特定格式的输入字符串方面不受限制。

F.i.,如果您想使最终用户能够以格式输入范围 number1-number2 ,您可以检查字符串是否符合此格式,并检查其部分是否投诉条件number1 <= number2。如果所有这些检查都已完成,您可以做一些有用的事情,或者如果检查失败,您可以拒绝。

function validRange(rangeStr, min, max) {
    var m = rangeStr.match(/^([0-9]+)-([0-9]+)$/);
    if ( m && m[1] >= min && m[2] <= max && m[1] <= m[2] ) {
        return true;
    }
    return false;
}
var s = '1-99';
var s = '55-50';
if ( validRange(s, 1, 99) ) {
    // do something useful
}

上面的代码只是进一步改进的框架,但现在可以使用。但是代码可能太复杂了,如果您或您的客户要求实现更复杂的东西,例如输入单个数字的能力,数字列表(用逗号,分号等分隔),混合范围或所有这些的任意组合。

因为您需要检查两个数字之间的验证,所以您必须使用逻辑运算来检查 forst 数字是否小于秒,因此在这种情况下您不能使用正则表达式,而是使用 if/else 语句:

var input = "55-50";
if(input.indexOf('-')){
    var input_arr = input.split('-');
    
    if(input_arr.length==2 && parseInt(input_arr[0])<parseInt(input_arr[1]))
        alert("Accepted");
    else
        alert("Not accepted");
}