首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex允许和禁止字符

Regex允许和禁止字符
EN

Stack Overflow用户
提问于 2014-02-07 12:45:58
回答 3查看 241关注 0票数 1

我正在使用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位或更高的数字是有效的?我很困惑..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-07 12:51:30

问题在于:

代码语言:javascript
复制
 ^products/([^/]+)/page-([^/]+[0-9]+)/sort-([^/]+)/?$
                         ^^^^^

这表示,“在/和至少一个数字后面跟着/之间匹配一个字符,而不是-。”因此,如果您有...page-1/,那么[^/]+[0-9]+只需要匹配一个字符总数,这就失败了。只需在这里删除[^/]+

代码语言:javascript
复制
 ^products/([^/]+)/page-([0-9]+)/sort-([^/]+)/?$
票数 1
EN

Stack Overflow用户

发布于 2014-02-07 12:51:04

问题是在[^/]+之后出现的page-。原因是这意味着要寻找至少一个不是/的字符,后面至少有一个数字。

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

票数 1
EN

Stack Overflow用户

发布于 2014-02-07 12:51:13

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

代码语言:javascript
复制
^products/([^/]+)/page-([^/0-9]*[0-9]+)/sort-([^/]+)/?$

[^/]+是"1或更多“,当它紧跟在"page-"之后时,它正在消耗这个数字的第一个数字。

如果您将其设置为“0或更多”(为了不允许任何额外的文本),并同时否定数字,那么您将使用[0-9]+捕获页码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21628175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档