首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获得6到10之间的字母和数字组合的Regex

获得6到10之间的字母和数字组合的Regex
EN

Stack Overflow用户
提问于 2019-09-11 20:38:55
回答 2查看 516关注 0票数 0

我在regex完全是新的。我觉得很混乱。我需要一个密码的组合,必须以字母开头,必须包含字母和数字的组合。总长度应在6-10之间。尝试在客户端js和服务器端php中进行密码验证。

代码语言:javascript
运行
复制
^[A-Za-z]+(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,9}$

由于某种原因,总长度正在被添加6+9。它没有按照它应该的方式工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-11 20:53:49

模式的开始使用字符类的量词,并将首先匹配1+乘以[a-zA-Z]在这些匹配之后,查找断言开始,以便匹配可以超过6-10个字符。

在您的模式中,您使用点.{6,9},它将匹配除换行符以外的任何字符,并且不限于字符a和数字。

您能做的是在开始时匹配一次[A-Za-z],然后是5-9次[A-Za-z0-9]

断言发生在第一个字符之后,因此在匹配[A-Za-z]之后,应该至少有一个大写字母and和一个数字表示。

代码语言:javascript
运行
复制
^[A-Za-z](?=[^\d]*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])[A-Za-z0-9]{5,9}$
  • 字符串的^开始
  • [A-Za-z]匹配大写或小写a-z
  • (?=[^\d]*\d)断言一个数字
  • (?=[^a-z]*[a-z])断言a-z
  • (?=[^A-Z]*[A-Z])断言A
  • [A-Za-z0-9]{5,9}匹配列表中的任何5-9次
  • 字符串的$末端

Regex演示

代码语言:javascript
运行
复制
let pattern = /^[A-Za-z](?=[^\d]*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])[A-Za-z0-9]{5,9}$/;
[
  "aA4aaaaaaa",
  "aA4a",
  "aA4aa",
  "aA4aaa",
  "aaaaaaa",
  "AAaaaaaa",
  "Pokemon12",
  "PokeMon12"
].forEach(s => console.log(s + " --> " + pattern.test(s)));

正如Casimir et Hippolyte在注释中指出的那样,如果您希望允许一个小写或大写字符,您可以从断言开始,然后匹配字符类[a-zA-Z]。对于php版本,使用\D修饰符。

代码语言:javascript
运行
复制
^(?=[^\d]*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])[A-Za-z][A-Za-z0-9]{5,9}$

Regex演示

票数 2
EN

Stack Overflow用户

发布于 2019-09-11 20:44:56

编辑:我想我可能误解了你所说的“字母和数字的组合”。无论如何,只需减少第二个模式的值,因为第一个模式“吞噬”了其中的一个字符。

如果你这样想的话--它必须从一个字母开始,然后包含5-9个字母/数字,这可能会更容易一些。因此,类似于^[a-zA-Z][a-zA-Z0-9]{5,9}$ --这是一个非常糟糕的密码要求。没有理由将特殊字符排除在外,您不应该只使用10个字符。我更喜欢完全转储这种任意的需求,而使用像兹克本这样的熵强度检查器。

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

https://stackoverflow.com/questions/57896508

复制
相关文章

相似问题

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