首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex,允许字符和数字,但最多只允许7位。

Regex,允许字符和数字,但最多只允许7位。
EN

Stack Overflow用户
提问于 2016-06-30 15:16:05
回答 6查看 2.4K关注 0票数 0

我非常感谢在下面的regex谜语中提供一些帮助。我需要regex语句来验证以下规则:输入可以包含字母、特殊字符和数字。输入不能以"0“开头,输入最多可有7位数

有效输入的例子:

Aa1234aa2.(小于7位) asd234566 (小于7位)

无效输入的示例:

0asdfd 92(以0开头) asd12312311 (超过7位数)

到目前为止我尝试过的:

代码语言:javascript
运行
复制
 ^\D[0-9]{0,7}$, 

对d0000000进行验证,但输入可能是d0d0dddd1234d

不能从0开始的部分如果非常复杂,可以从需求中删除。最重要的是要有“最多可以有7位数”的部分。

你好,奥列格

EN

回答 6

Stack Overflow用户

发布于 2016-06-30 15:23:28

这就是你需要的!

代码语言:javascript
运行
复制
Attempt 1: ^[1-9]\d{0,6}$
Attempt 2: ^[^0][\d\w]{0,6}$
Attempt 3: ^[^0].{0,6}$
Attempt 4: ^([\D]*\d){0,7}[\D]*$
Attempt 5: ^([\D]*[1-9]){0,7}[\D]*$|^[^0]\d{0,6}$
Attempt 6: ^([\D]*[1-9]){1,7}[\D]*$|^[^0]\d{1,6}$ <- this should work

这里的例子

票数 2
EN

Stack Overflow用户

发布于 2016-06-30 15:52:28

如果我正确地理解了需求,这将起作用:

代码语言:javascript
运行
复制
^(?=[^0])(\D*\d){0,7}\D*$

这将允许任何不以零开头且有7位或更少数字的字符串。任何其他字符在任何数量都是允许的。

解释

第一部分(?=[^0])是一个断言,它检查字符串是否以零开头。其余的匹配任意数量的非数字,后面跟着一个数字,最多7次.然后在字符串结束之前的任意数量的非数字。

票数 1
EN

Stack Overflow用户

发布于 2016-06-30 16:07:32

假设Perl (它看起来像Perl正则表达式):

  1. 检查前导零:if (subst($pass, 0, 1) eq '0') { fail }
  2. 检查不超过七位数:if (($pass =~ tr /0-9/0-9/) > 7) { fail }

我通常不想把所有的东西都塞进一个正则表达式中,特别是当有其他工具可以做这个工作的时候。在这种情况下,如果有前导零,并且在字符串开头很容易发现前导零,则不会执行tr

这样做,可以很容易地独立于其他限制添加进一步的限制。例如,“如果所有数字都由其他类型的字符分隔”(可能是这个字符的正则表达式),那么可能会有超过7个数字。

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

https://stackoverflow.com/questions/38127249

复制
相关文章

相似问题

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