I'm sorry if this has been up before but I can't find anythin on google that gives what I want.
I've a field where you can write expressions: x>1, x>2||x<1 (x>1) && (x<2) etc.
What I want is a regex that checks the expression so it only can contain a certain valid characters to defend against code injection. a.1 should not match.
So far I'm using this:
expression.match('[xX<>=|0-9&().]')
But this also returns anything that contains any of these characters. What I want is a expression that only returns if all character match any of thoose in the regex.
You need * or + quantifier after your character class and anchors:
/^[xX<>=|0-9&()\s.]*$/.test(expression)
 ^                 ^^
Now, it will match
^ - start of string[xX<>=|0-9&\s().]* - zero or more (if you use +, one or more) of the chars defined in the char class$ - end of string.Short demo:
console.log(/^[xX<>=|0-9&\s().]*$/.test("a.1"));
console.log(/^[xX<>=|0-9&\s().]*$/.test("(x>1) && (x<2)"));
Note I added \s to match whitespaces, too.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With