首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex -防止某些字符串匹配

Regex -防止某些字符串匹配
EN

Stack Overflow用户
提问于 2016-02-14 20:43:16
回答 2查看 1.3K关注 0票数 1

我在试着匹配一个银行帐号。它可以是这样的格式:################-##########

  • 第一组(######-),如果存在的话,可以有1-6个数字跟在-后面,它们不能都是零。它可以与123456-相匹配,但不能000000-
  • 第二组(##########)可以有2-10个数字,必须有一个无零字符。

我从这个regex (\d{1,6}\-)?\d{2,10}开始。它应该匹配1和2行,而不是3和4。这个正则表达式匹配1.2和4。

  1. 100000-1234567890
  2. 1234567890
  3. -1234567890
  4. 000000-1234567890
EN

回答 2

Stack Overflow用户

发布于 2016-02-14 20:48:44

您可以使用带有负前瞻性的正则表达式,以确保开始时带有所有零的代码不匹配:

代码语言:javascript
运行
复制
^(?:(?!0+-)\d{1,6}-)?(?=\d*[1-9])\d{2,10}$

regex演示

这里,

  • ^ -匹配字符串的开头
  • (?:(?!0+-)\d{1,6}-)? -可选地(1次或0次,由于(?:...)?构造)匹配1到6位数字(与\d{1,6}),后面跟着连字符,只有当到-的数字不是零时(由于负的前瞻性(?!0+-))
  • (?=\d*[1-9]) -第二组2到10位数应该至少有一个非零位数。
  • \d{2,10} -匹配2到10位数字,后面跟着.
  • $ -字符串的末尾

基本上,您只需要在regex中添加两样东西:

  • 锚(^$)
  • 展望未来
票数 4
EN

Stack Overflow用户

发布于 2016-02-14 21:09:00

Wiktof Stribizew的回答是“好的”。

但是,如果你想避免头朝前看的头痛,你只需使用以下几个:

代码语言:javascript
运行
复制
^(?:[1-9](?:\d{1,5})?-)?\d{2,10}$

在这里,我们只是禁止在第一组中的初始"0“,然后只允许直到其他5个数字。

这里的演示

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

https://stackoverflow.com/questions/35397751

复制
相关文章

相似问题

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