如何用正则验证以#/开头的URL路径并排除特殊字符?
正则表达式需求:匹配仅含字母的#/开头路径
我想要编写一个以“#/”开头的正则表达式,仅接受由大小写字母(A-Z/a-z)组成的路径,不允许数字或特殊字符。
有效路径示例:
#/ #/word/word #/word #/word/word/word
目前我尝试了以下正则表达式:
#\/\D+|\/\D+
还试过:
#\/\D+|\s\/^[A-Za-z\s]*$
该正则能过滤85%的路径,但仍会将带特殊字符的路径(如“#/word/word?test=word”“#/word/word=%”)判定为有效,我不清楚问题出在哪里。
你的问题核心是现有正则没做全字符串范围限定,也没精准锁定合法字符:
\D+会匹配所有非数字字符(包括?、=这类特殊符号),所以带特殊字符的路径会被误判。- 正则里的
|逻辑混乱,且没加^和$锚定首尾,导致只要字符串里有符合片段就会被判定有效。
给你两个精准的正则方案:
方案1:兼容空结尾(支持单独#/)
^#\/(?:[A-Za-z]+\/)*[A-Za-z]*$
^强制字符串必须以#/开头(?:[A-Za-z]+\/)*匹配0次或多次“字母+斜杠”组合(比如word/),?:是无捕获组,不额外占用匹配内存[A-Za-z]*匹配0个或多个字母(对应#/或#/word这类结尾情况)$强制字符串结尾不能有任何额外字符
方案2:要求至少含一个字母(排除单独#/)
^#\/[A-Za-z]+(?:\/[A-Za-z]+)*$
验证效果
- 匹配成功:
#/、#/word、#/word/word - 匹配失败:
#/word?test、#/word=123、#/word%
内容的提问来源于stack exchange,提问作者Jessica M.
相关产品推荐
相关产品推荐

