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