正则表达式验证Node.js应用程序中的URL路径

时间:2017-09-14 18:33:04

标签: javascript node.js regex

我想验证一个网址路径,以确保它不包含背靠背?&=-的。该路径应仅包括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)或者它们是为非动态网址路径构建的具体情况(即thisthis)。

我已尝试从头开始构建一个,但我对Regex缺乏经验,所以我设法得到[a-zA-Z0-9/]*的起点基本上匹配除了空格之外的任何东西,但需要大量工作才能获得我想要的。

1 个答案:

答案 0 :(得分:1)

好的,所以你正在使用一个角色类。您可以使用允许不允许的双字符的字符类:

[-\/?&]

然后捕获并使用后引用,这样你就会知道发生了一个不允许的重复字符。

([-\/?&])\1

然后,您可以添加否定的字符类,以查看是否存在不允许的字符:

[^A-Za-z0-9\/&=?-]

这两个表达式可以放在一起:

(?:([-\/?&])\1|[^A-Za-z0-9\/&=?-])

然后如果匹配则字符串无效。

https://regex101.com/r/zPIObe/3/