Home > database >  Validating a url path with regex and excluding special characters
Validating a url path with regex and excluding special characters

Time:11-03

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.

CodePudding user response:

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

CodePudding user response:

You can start the match with #/ and then optionally match the trailing part:

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

Explanation

  • ^ Start of string
  • #\/ Match #/
  • (?: Non capture group
    • [A-Za-z] Match 1 chars A-Za-z
    • (?:\/[A-Za-z] )* Optionally repeat / and 1 chars A-Za-z
  • )? Close the non capture group and make it optional
  • $ End of string

See a regex demo.

  • Related