Reputation: 13
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.
Upvotes: 1
Views: 1003
Reputation: 163467
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 stringSee a regex demo.
Upvotes: 0
Reputation: 522151
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 stringUpvotes: 0