如何在javascript中创建动态正则表达式来验证十进制数

How to create Dynamic Regular Expression in javascript to validate decimal number

本文关键字:正则表达式 验证 十进制数 动态 创建 javascript      更新时间:2023-09-26

我必须根据在小数之前和小数之后提供的数字来验证十进制数。假设我有一个函数,它有一个正则表达式,并接受两个参数,分别是小数点前和小数点后的数字。

function validateDecimalNo(digitBeforeDec,digitAfterDec){
          //here i need to write the regular expression to validate the  decimal no based on the inputs.
            }
  • 如果我通过了2,3,它应该根据这个限制检查十进制数
  • 如果我通过了10,6,它应该根据这个限制验证no
  • 如果我通过了4,2,它应该根据这个限制验证no

如何创建满足上述要求的单个动态正则表达式

在JavaScript中,您有文字语法(/regex/, {object},甚至"string"),并且您有非文字语法(new RegExp(), new Object(), new String())。

有了这个,你可以使用非文字版本的regex,它接受字符串输入:

var myRegex = new RegExp("hello", "i"); // -> /hello/i

因此,提供了这个,我们可以创建一个函数来创建一个"动态正则表达式"函数(引号是因为它每次运行时实际上都会返回一个新的正则表达式对象)。

例如:

var getRegex = function(startingSym, endingSym, optional){
  return new RegExp(startingSym + "(.+)" + endingSym, optional)
}
因此,对于这个示例函数,我们可以这样使用它:
var testing = getRegex("ab", "cd", "i");
console.log(testing);
// Output:
/ab(.+)cd/i

为什么使用regexp?直接查号码就行了。

function make_decimal_validator(digitBeforeDec,digitAfterDec) {
    return function(no) {
        var parts = no.split('.');
        if (parts.length !== 2) throw "Invalid decimal number";
        return parts[0].length === digitBeforeDec && parts[1].length === digitAfterDec;
    };
}

创建验证器:

var validator23 = make_decimal_validator(2, 3);
validator23('12.345') // true