正则表达式以验证URI中的参数

时间:2019-02-11 13:26:09

标签: java regex

我正在尝试使用正则表达式验证系统的URI,以在REST API的URI中间标识参数,但是,我在URI末尾遇到参数验证问题,例如:< / p>

在数据库中,我获得了URI规则:/uaa/api/users/*/city/*

用正则表达式替换'*',以便它接受/或/之后的任何字符:^/uaa/api/users/+(.*)+/city/+(.*)$

我将带有正则表达式的URI与请求URI进行比较:/uaa/api/users/john.connor/city/12

但是,如果我删除URI末尾的值并仅保留/,则表示接受我需要它失败,因为/后面没有值,也就是说,在将^/uaa/api/users/+(.*)+/city/+(.*)$正则表达式与我需要/uaa/api/users/john.connor/city/ URI失败,因为/后面没有值。我该怎么做,这样他就不会接受后面毫无意义的小节?

我不知道这是否重要,但是我正在Java中使用正则表达式!

2 个答案:

答案 0 :(得分:1)

关于您正在使用的模式,需要注意几件事。

在此情况下,/+中的加号是一个量词,与正斜杠匹配1+倍。 (.*)+的这一部分还使用该量词来重复一个其自身与任何字符匹配0+倍的组(包括正斜杠)。

我认为您要寻找的是在正斜杠之间以及最后一部分之间使用否定的character class [^/]+而不是正斜杠,以使url不能以正斜杠。

^/uaa/api/users/[^/]+/city/[^/]+$

请参见regex demo

答案 1 :(得分:0)

Here

其中至少包含以下每个类别中的一个字符。

小写字符 大写字母 数字 符号

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W)

(?=.*[a-z])        // use positive look ahead to see if at least one lower case letter exists
(?=.*[A-Z])        // use positive look ahead to see if at least one upper case letter exists
(?=.*\d)           // use positive look ahead to see if at least one digit exists
(?=.*\W])        // use positive look ahead to see if at least one non-word character exists