regex 使用正则表达式验证URL路径并排除特殊字符

sh7euo9m  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(193)

我正在尝试编写一个表达式,该表达式以“#”开头,接受以下类型的路径,只接受字符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=%”)的路径
我不太确定我错过了什么。

2skhul33

2skhul331#

我会将正则表达式表述为:

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

此正则表达式表示匹配:

  • ^(从字符串开头算起)
  • (?:
  • #/单独匹配#/
  • |
  • #/匹配#/
  • [A-Za-z]+后跟路径名
  • (?:/[A-Za-z]+)*,后跟零个或多个其他路径
  • )
  • $字符串结尾

Demo(第一个字母)

h5qlskok

h5qlskok2#

您可以从#/开始比对,然后选择性地比对结尾部分:

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

说明

  • ^字符串开头
  • #\/匹配#/
  • (?:非捕获组
  • [A-Za-z]+匹配1个以上字符A-Za-z
  • (?:\/[A-Za-z]+)*可选地重复/和1+个字符A-Za-z
  • )?关闭非捕获组并将其设置为可选
  • $字符串结束

请参见regex demo

相关问题