Search code examples
regexpathregex-negationregular-languageheap-analytics

Validating a url path with regex and excluding special characters


I'm trying to write up an expression that starts with a '#" and takes in the following types of paths and only takes in a character A-z/a-z and doesn't accept digits or special characters: Example valid paths:

#/
#/word/word
#/word
#/word/word/word

This is what I have currently:

#\/\D+|\/\D+

I have also tried:

#\/\D+|\s\/^[A-Za-z\s]*$

It filters 85% of the paths correctly but it still accepts paths with special characters as valid such as "#/word/word?test=word" "#/word/word=%"

I'm not quite sure what I am missing.


Solution

  • I would phrase the regex as:

    ^(?:#/|#/[A-Za-z]+(?:/[A-Za-z]+)*)$
    

    This regex says to match:

    • ^ from the start of the string
    • (?:
      • #/ match #/ by itself
      • | OR
      • #/ match #/
      • [A-Za-z]+ followed by a path name
      • (?:/[A-Za-z]+)* followed by zero or more other paths
    • )
    • $ end of the string

    Demo