preg_match/replace to fix a search query

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
I am working on a script to handle a search query.  In some instances,
the query could come through as "isbn:%20#############" (where %20 is
an encoded space and the colon is optional).  Basically I want to
strip off the ISBN portion and leave just the numbers if that is the

Orignally I was trying
$value = $_GET["query"];
if (preg_match("isbn:?%20", $value))
  $isbn = preg_replace("isbn:?%20", "", $value)
  $isbn = $value

Doesn't seem to work though.  Any thoughts?

Re: preg_match/replace to fix a search query

Quoted text here. Click to load it

I wouldn't use regex unless really nessessary.
I assume your problem lies with the space character. Usually, the
script transforms encoded url characters back into their original
form. I suggest using a normal space char in the script, and just to
make sure, a str_replace("%20", " ", $string) in the beginning.

Re: preg_match/replace to fix a search query wrote:
Quoted text here. Click to load it

- The pattern of preg_match needs delimiters. Mostly slashes are used  
for this: /pattern/
- Each statement should be ended with a semicolon;
- Note that PHP automatically URL-decodes the GET parameters, so %20 in  
the URL will become a space in the GET variable.
- You can use the matches parameter to retrieve the ISBN number.
- When asking a question here, "doesn't seem to work" is not good  
enough. Insert echo statements to see whether the preg_match actually  
matches and report any error you get in your post.

if (preg_match("/isbn:? ([0-9X]*)/", $value, $match))
   $isbn = $match[1];
   $isbn = $value;


Re: preg_match/replace to fix a search query

Thanks for all the input.  My solution ended up somewhat different,
but in the same vein.

Another script handed off the data based on a regex trigger, therefore
I knew if this was invoked, it had to be a valid ISBN number, so no
need to actually test if it matched since I know it does.  If the
query started with "ISBN" or "ISBN:", regardless of the number the
total length would be > 13, which is the longest the input could be
and be a valid ISBN, so I used:

if (strlen($bookISBN) > 13)
  $bookISBN = preg_replace('/(\w+)(:)? (\d=)/', '$3', $bookISBN);

So far, so good.  Everything works just as it should now.

Quoted text here. Click to load it

Site Timeline