Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I catch an invalid preg_match pattern?

I am writing a PHP script that accepts a regular expression pattern from the user which is used by preg_match(). How can I check that the pattern is valid?

like image 899
Liam Avatar asked Sep 14 '10 15:09

Liam


2 Answers

According to the docs,

preg_match() returns FALSE if an error occurred.

the problem is that it will also throw a warning.

One way to deal with this is is to suppress the output of the error message, catch the return value, and output the error using error_get_last() if it was false.

Something like

$old_error = error_reporting(0); // Turn off error reporting

$match = preg_match(......);

if ($match === false) 
 {
   $error = error_get_last();
   echo $error["message"];
 }

error_reporting($old_error);  // Set error reporting to old level

You may not need the error reporting bit in a production environment - it depends on your setup.

like image 53
Pekka Avatar answered Oct 10 '22 05:10

Pekka


Just test it. preg_match() will return FALSE if the pattern is not valid.

Return values: preg_match() returns the number of times pattern matches. That will be either 0 times (no match) or 1 time because preg_match() will stop searching after the first match. preg_match_all() on the contrary will continue until it reaches the end of subject. preg_match() returns FALSE if an error occurred.

like image 34
Lekensteyn Avatar answered Oct 10 '22 05:10

Lekensteyn