我正在使用regex字符串来验证页码是否仅为数字。我使用的regex字符串是^products/([^/]+)/page-([^/]+[0-9]+)/sort-([^/]+)/?$,示例中使用的url是products/mens/page-1/sort-newest-first,该字符串在regex匹配时失败。但是,一个2位数的数字可以工作,比如products/mens/page-10/sort-newest-first。
有人知道为什么它不允许规则中的一位数,但2位或更高的数字是有效的?我很困惑..。
发布于 2014-02-07 12:51:30
问题在于:
^products/([^/]+)/page-([^/]+[0-9]+)/sort-([^/]+)/?$
^^^^^这表示,“在/和至少一个数字后面跟着/之间匹配一个字符,而不是-。”因此,如果您有...page-1/,那么[^/]+[0-9]+只需要匹配一个字符总数,这就失败了。只需在这里删除[^/]+:
^products/([^/]+)/page-([0-9]+)/sort-([^/]+)/?$发布于 2014-02-07 12:51:04
问题是在[^/]+之后出现的page-。原因是这意味着要寻找至少一个不是/的字符,后面至少有一个数字。
因此,在有一个数字的例子中,它将被[^/]消耗,但是由于后面没有至少一个数字,所以正则表达式将失败。但是,两位数或更多位数将起作用,因为第一位数的消耗方式相同,但后面至少有一位数。
发布于 2014-02-07 12:51:13
问题是[^/]+在page之后。将其更改为[^/0-9]*
^products/([^/]+)/page-([^/0-9]*[0-9]+)/sort-([^/]+)/?$[^/]+是"1或更多“,当它紧跟在"page-"之后时,它正在消耗这个数字的第一个数字。
如果您将其设置为“0或更多”(为了不允许任何额外的文本),并同时否定数字,那么您将使用[0-9]+捕获页码。
https://stackoverflow.com/questions/21628175
复制相似问题