0

How can i concat a string in javascript to create a dynamic regular expression? The commented line works fine.

var numericValidator = function (value, callback)
{
    var decimalSymbol = ServerVar.NumberDecimalSeparator == "." ? "\." : ",";

    console.log(decimalSymbol);

    var regExNum = new RegExp("^-?(?:\d+|\d{1,3}(?:[\s\]\d{3})+)(?:[" + decimalSymbol + "]\d+)?");
    if (regExNum.test(value)) {
    //if (/^-?(?:\d+|\d{1,3}(?:[\s]\d{3})+)(?:[\.,]\d+)?$/.test(value)) {
        if (callback) callback(true);
        return true;
    }

    if (callback) callback(false);
    return false;
};
Josh
  • 31
  • 6

2 Answers2

2

Use two escape chars

var regExNum = new RegExp("^-?(?:\\d+|\\d{1,3}(?:[\\s\\]\\d{3})+)(?:[" + decimalSymbol + "]\\d+)?");
Rubydesic
  • 3,386
  • 12
  • 27
1

I suggest using ES6 strings which are very appropiated for such cases.

var numericValidator = function (value, callback)
{
    var decimalSymbol = ServerVar.NumberDecimalSeparator == "." ? "\." : ",";

    console.log(decimalSymbol);
    var regExNum = new RegExp(`^-?(?:\d+|\d{1,3}(?:[\s\]\d{3})+)(?:[${decimalSymbol}]\d+)?`);        
    if (regExNum.test(value)) {
    //if (/^-?(?:\d+|\d{1,3}(?:[\s]\d{3})+)(?:[\.,]\d+)?$/.test(value)) {
        if (callback) callback(true);
        return true;
    }

    if (callback) callback(false);
    return false;
};

Such strings are delimited by backticks (`).

Notice the use of ${<exp>} to embed scope expressions within your string.

Mario Vázquez
  • 717
  • 10
  • 9