wildwally
wildwally

Reputation: 39

PHP trouble with preg_match

I thought I had this working; however after further evaluation it seems it's not working as I would have hoped it was.

I have a query pulling back a string. The string is a comma separated list just as you see here:

(1,145,154,155,158,304)

Nothing has been added or removed.

I have a function that I thought I could use preg_match to determine if the user's id was contained within the string. However, it appears that my code is looking for any part.

preg_match('/'.$_SESSION['MyUserID'].'/',$datafs['OptFilter_1']))

using the same it would look like such

preg_match('/1/',(1,145,154,155,158,304)) I would think. After testing if my user id is 4 the current code returns true and it shouldn't. What am I doing wrong? As you can see the id length can change.

Upvotes: 0

Views: 48

Answers (1)

revo
revo

Reputation: 48711

It's better to have all your IDs in an array then checking if a desired ID is existed:

<?php
    $str = "(1,145,154,155,158,304)";
    $str = str_replace(array("(", ")"), "", $str);
    $arr = explode(',', $str);
    if(in_array($_SESSION['MyUserID'], $arr))
    {
        // ID existed
    }

As your string - In dealing with Regular Expressions, however it's not recommended here, below regex will match your ID if it's there:

preg_match("@[,(]$ID[,)]@", $str)

Explanations:

[,(]    # a comma , or opening-parenthesis ( character
    $ID # your ID
[,)]    # a comma , or closing-parenthesis ) character

Upvotes: 2

Related Questions