federicot federicot - 2 months ago 5x
PHP Question

Regex to match a slug?

I'm having trouble creating a Regex to match URL slugs (basically, alphanumeric "words" separated by single dashes)


I've come up with this Regex:
and while it restricts the string to only alphanumerical characters and dashes, it still produces some false positives like these:


I'm quite bad with regular expressions, so any help would be appreciated.


You can use this:

  [a-z0-9]+   # One or more repetition of given characters
  (?:         # A non-capture group.
    -           # A hyphen
    [a-z0-9]+   # One or more repetition of given characters
  )*          # Zero or more repetition of previous group

This will match:

  1. A sequence of alphanumeric characters at the beginning.
  2. Then it will match a hyphen, then a sequence of alphanumeric characters, 0 or more times.