使用正则表达式验证用户名和密码

当我第一次学习 Web 开发时,我一直无法理解的工具之一就是正则表达式。自从我找到第一份工程工作以来已经过去了大约一年半的时间,这种理解程度一直持续到最近。

我以前并不真正需要学习正则表达式,但最近的一个工作项目(移动应用程序、React Native)需要在用户注册页面上对用户名和密码进行前端验证。这个用例非常复杂,需要学习比我知道的更多的东西,但又很容易实现。最后,这感觉就像是在教程中讨论的一个很好的例子,所以我们就在这里!

问题

用户名有最少字符数、至少需要一个数字等等。密码通常也会做同样的事情,通常会添加对密码强度的评估。

对于我们这里的示例,我们希望满足以下条件:

用户名:6 至 16 个字符,仅限字母数字
有效密码:8至32个字符,至少1个字母和1个数字
强密码:有效,加上大小写字母和特殊字符的组合

解决方案

A 部分:我们需要的正则表达式
用户名
虽然在这里接触一些正则表达式是有用的,但以下解释旨在足够清晰,让任何人都能理解。

让我们从用户名开始。我们需要它仅包含字母和数字,并且长度必须在 6 到 16 个字符之间。这就能解决问题:

/^[0-9A-Za-z]{6,16}$/

让我们把这个陈述分成几个部分。

/…/包装/表示正则表达式语句
^表示字符串的开头,while$表示字符串的结尾。基本上,这是确保整个字符串遵循我们的规则,而不仅仅是字符串的子集。
[…]表示一组特定的有效字符,也称为字符类;0-9允许数字、A-Z允许大写字母、a-z允许小写字母。还有其他指标,您可以在正则表达式文档中找到完整列表。
{6,16}表示允许的字符数。如果您刚刚使用{6},则您将测试长度恰好为 6,同时{6,}测试最小长度。
密码
当我们继续测试有效密码时,要求发生了变化。现在我们不再局限于字母和数字,而是需要至少每种不同类型的字符之一。这需要我们对它们中的每一个进行特定的检查,如下所示:

/^(?=.*?[0-9])(?=.*?[A-Za-z]).{8,32}$/

让我们在这里分解一下新符号。

(…)是一个捕获组。您可以使用它们来捕获特定顺序的特定字符。
?=是积极的前瞻。搜索从您在正则表达式中做出此断言的位置向右移动到字符串。
.表示任何字符都是可能的,而表示“零个或多个”字符。
中的额外问号?=.
?使搜索变得懒惰,这本质上意味着“在第一次满足此要求后停止查找”。
翻译成简单的英语,我们的语句的第一部分^(?=.*?[0-9])意味着“从字符串的开头,找到一个前面有零个或多个任何字符的数字”。

添加(?=.*?[A-Za-z])意味着对任何字母执行相同的操作,或者“从字符串的开头,找到前面有零个或多个任何字符的字母”。这使我们能够确认指定类型的字符在允许的总集合中是否存在,而不管它出现在字符串中的位置。</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q shen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值