ditto ditto - 2 years ago 209
PHP Question

preg_match: /usersname or /username/foo

I'm wanting to preg_match the following URIs. Note usernames are: [\w]{1,15}

/username
/username/foo
/usersname/bar


I want these to fail

/username/anythingelse


The username is mandatory, so the preg_match should work if just a username is given, and then check if anything after is either
foo
or
bar
.

preg_match('{^\/([\w]+){1,15}/{/foo|/bar}?$}', $uriString)


You can probably tell my preg_match fails. How may I fix this?

Answer Source

Use parentheses to specify a group of alternatives;

Curly braces are only used to limit repetition {min,max}

^\/\w{1,15}(\/foo|\/bar)?$ ==> DEMO

Above, we allow \w 1 up to 15 times (\w matches any word character [a-zA-Z0-9_])

Followed by either \/foo or \/bar

^ and $ specify the start and the end of the string, meaning that the regex must match the full string not only a part of it

You can read more about:

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download