RE: [PHP] Sterilizing regexp
| From: | Boyd, Todd M. | Date: | Tue, 30 Sep 2008 18:35:06 +0000 |
| Subject: | RE: [PHP] Sterilizing regexp | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-281224@lists.php.net to get a copy of this message | ||
> -----Original Message-----
> From: Frank Stanovcak [mailto:blindspotpro@comcast.net]
> Sent: Tuesday, September 30, 2008 12:45 PM
> To: php-general@lists.php.net
> Subject: [PHP] Sterilizing regexp
>
> A while ago I asked a question and got a few answers, so I thought I
> would
> toss this out there as a follow up. I'm going to be using this to
> return
> filtered regexp values for a user interface.
>
> I haven't had a chance to enter this into my code yet, so if anyone
> sees
> something wrong please hammer away, otherwise I hope it helps save
some
> one
> some time.
>
> function regexp_sanitize($string,$regexp) {
> if(isarray($string)) {
> foreach($string as $key => $value) {
> $count = preg_match($regexp,$value,$matches) {
> if($count != 1) {
> $result[$key] = FALSE;
> } else {
I have a problem with this part right here:
> foreach($matches as $toss => $matchval) {
> $result[$key] = $matchval;
> };
If there are multiple matches, you will only wind up with the last match
in $result[$key].
> };
> };
> } else {
> $count = preg_match($regexp,$string,$matches);
> if($count != 1) {
> $result = FALSE;
> } else {
> $result = $matches[0];
> };
> };
> return($result);
> };
Also, I believe you want preg_match_all() if you're going to be wanting
to grab the "matches." Note: MATCH and CAPTURE GROUP are not the same
thing. The $matches array you're working with from preg_match() should
contain the entire string that was matched in the first array slot and
subsequent capture groups--(.*?) for instance--in the remaining array
slots. preg_match_all() can be used to find multiple MATCHEs (perhaps
each with multiple CAPTURE GROUPs) if there are more than one in the
string being traversed.
HTH,
Todd Boyd
Web Programmer