> Simply trying to use regular expressions to validate a 5 or 5+4 zip code, > excluding 00000 and 00000-0000. Looked on http://www.regexlib.com, and > that's where I found the pattern below, but it doesn't work. The best I can > do on my own is two separate regular expressions, one to match a valid zip, > and another to match the 00000 invalid code. I would really like to > condense it into one, just because I think it should be possible. > This code below is suppose to do all this for me, but it's not matching as > I'd hoped. I get results like this: > > 21832-1234 MATCHES. > 00000-0000 MATCHES. > 00000 MATCHES. > 1234 doesn't match. > ABCDEF doesn't match. > ABC doesn't match. > > I'd appreciate any help. Thanks, > jason > > <?php > > $regex1 = "/^(\?(^00000(|-0000))|(\d{5}(|-\d{4})))$/"; > > $zips = > array("21243","21832-1234","00000-0000","00000","1234","ABCDEF","ABC"); > > foreach ($zips as $zip) { > if (preg_match($regex1,$zip)) { > echo "$zip MATCHES.<br>"; > } else { > echo "$zip doesn't match.<br>"; > } > } > > ?>
Don't know of a way to do it all in one regex. You could do something like this, though: $pattern = '/[0-9]{5}(-[0-9]{4})?/'; if((int)$zip && preg_match($pattern,$zip)) { echo "$zip MATCHES"; } else { echo "$zip doesn't match"; } Casting $zip to an INTEGER and checking for a TRUE value will eliminate 00000, 00000-0000, and anything starting with a letter right off the bat. Then your regex can handle the rest. ---John Holmes... -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php