-1

i need to check, if the string in my PHP code contains only a specified list of characters. But as some of them might need scape, i just can't get it to work. I have tried everything, but it just doesen't work...

The required validation is:

  • 0-9
  • A-Z
  • a-z
  • chars: .%^&()$#@!/-+/

Basicaly, i want to check if there is an unknown ascii character (i don't know if there is a function to do that already).

My code is like this now:

if(preg_match("/[A-Za-z0-9\.\#\-\+\*\\\/\=\_\%\$\(\)]/", $cmd) === false)

So, all of the chars are special?

Ivan Seidel
  • 2,394
  • 5
  • 32
  • 49

3 Answers3

2

No, all of those characters are not special. If you're unsure, you can let PHP do the escaping for you with preg_quote():

$regex = '/[A-Za-z0-9' . preg_quote( '.%^&()$#@!/-+/', '/') . ']+/';
if( !preg_match( $regex, $cmd))

Also, preg_match() returns an int, and you're doing === on a boolean, which will never hold true, since they will never be of the same type. You can simply check for if( !preg_match()).

nickb
  • 59,313
  • 13
  • 108
  • 143
1

You might be missing a * at the end of the regexp. Also you could instead have the set expressed like [\x00-\x7F] (taken from here).

This should work:

[\x00-\x7F]*
Community
  • 1
  • 1
juan.facorro
  • 9,791
  • 2
  • 33
  • 41
0

if(preg_match("/[.%^&()$#@!/+-a-zA-Z\d\s]+/", $cmd) === false) and if you need anchors if(preg_match("/^[.%^&()$#@!/+-a-zA-Z\d\s]+$/", $cmd) === false)

burning_LEGION
  • 13,246
  • 8
  • 40
  • 52