Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

All characters in a string must match regex

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.

like image 391
President Camacho Avatar asked Oct 14 '16 07:10

President Camacho


1 Answers

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.

like image 144
Wiktor Stribiżew Avatar answered Oct 14 '22 06:10

Wiktor Stribiżew