我正在使用正则表达式字符串来验证页码仅作为数字。我正在使用的正则表达式字符串是^products/([^/]+)/page-([^/]+[0-9]+)/sort-([^/]+)/?$
,并且示例中使用的url是products/mens/page-1/sort-newest-first
,该字符串因正则表达式匹配而失败..但是2位数字的作用 - 例如{{1} }。
有人知道为什么它不允许规则中的一位数但2位数或更大数字有效吗?我很难过..
答案 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-([^/]+)/?$