我想验证一个网址路径,以确保它不包含背靠背?
,&
,=
或-
的。该路径应仅包括a-z,A-Z,0-9,?, - ,&和=。
例如,这些应该通过:
item/643fe4ac-e87d-4b71-8fd1-522154f933c2/okay
person/adam?height=23&favcolor=blue
city/building/916fe4ac-e87d-4b71-8fd1-522154f933r5
虽然这些失败了:
item/643fe4ac--e87d-4b71-8fd1---522154f933c2/okay
person/adam??height=23&favcolor=blue
city/@/916fe4ac-e87d-4b71-8fd1-522154f933r5
我在网上查看的解决方案在我https://regexr.com/上试用时似乎不起作用(例如,this)或者它们是为非动态网址路径构建的具体情况(即this或this)。
我已尝试从头开始构建一个,但我对Regex缺乏经验,所以我设法得到[a-zA-Z0-9/]*
的起点基本上匹配除了空格之外的任何东西,但需要大量工作才能获得我想要的。
答案 0 :(得分:1)
好的,所以你正在使用一个角色类。您可以使用允许不允许的双字符的字符类:
[-\/?&]
然后捕获并使用后引用,这样你就会知道发生了一个不允许的重复字符。
([-\/?&])\1
然后,您可以添加否定的字符类,以查看是否存在不允许的字符:
[^A-Za-z0-9\/&=?-]
这两个表达式可以放在一起:
(?:([-\/?&])\1|[^A-Za-z0-9\/&=?-])
然后如果匹配则字符串无效。