正则表达式允许和禁止字符

时间:2014-02-07 12:45:58

标签: regex

我正在使用正则表达式字符串来验证页码仅作为数字。我正在使用的正则表达式字符串是^products/([^/]+)/page-([^/]+[0-9]+)/sort-([^/]+)/?$,并且示例中使用的url是products/mens/page-1/sort-newest-first,该字符串因正则表达式匹配而失败..但是2位数字的作用 - 例如{{1} }。

有人知道为什么它不允许规则中的一位数但2位数或更大数字有效吗?我很难过..

3 个答案:

答案 0 :(得分:1)

问题是在[^/]+之后的page-。原因是这说要找到至少一个不是/后跟至少一个数字的字符。

因此,在一个数字的示例中,它将被[^/]消耗,但由于后面没有至少一个数字,因此正则表达式将失败。但是,两个数字或更多数字会起作用,因为第一个数字会以相同的方式消耗,但后面至少有一个数字。

答案 1 :(得分:1)

问题是[^/]+之后的page。将其更改为[^/0-9]*

^products/([^/]+)/page-([^/0-9]*[0-9]+)/sort-([^/]+)/?$

[^/]+,即“1或更多”,在紧跟"page-"之后消耗该数字的第一个数字。

如果您将其设为“零或更多”(以便不允许其中包含额外的文字)并且还取消数字,则您将使用[0-9]+

捕获页码

答案 2 :(得分:1)

问题在于:

 ^products/([^/]+)/page-([^/]+[0-9]+)/sort-([^/]+)/?$
                         ^^^^^

这说:“在/和至少一个后跟-之间匹配/以外的字符。”因此,如果您有...page-1/,则[^/]+[0-9]+只匹配一个字符,但失败了。只需删除此处的[^/]+

即可
 ^products/([^/]+)/page-([0-9]+)/sort-([^/]+)/?$