繁体   English   中英

我如何编写 Javascript 正则表达式模式来处理这些情况

[英]How can I write the Javascript Regular Expression pattern to handle these conditions

在我的练习中,我的任务是编写一个正则表达式模式来验证用户名输入以存储到数据库中。

用户名只能使用字母数字字符。

用户名中唯一的数字必须在末尾。 最后可以有零个或多个。 用户名不能以数字开头。

用户名字母可以是小写和大写。

用户名的长度必须至少为两个字符。 两个字符的用户名只能使用字母作为字符。

我成功通过了除一项以外的所有测试

A1 不应该匹配模式

let userCheck = /^[A-Za-z]+\w\d*$/;
let result = userCheck.test(username);

编辑:

我的第一个答案没有完全解决任务。 这个正则表达式做:

^([A-Za-z]{2}|[A-Za-z]\w{2,})$

它匹配两个字符,或一个字符后跟至少两个字符和/或数字( \w == [A-Za-z0-9] )。 在此处查看演示: https://regex101.com/r/sh6UpX/1

第一个答案(错误)

这适用于您的描述:

let userCheck = /^[A-Za-z]{2,}\d*$/;
let result = userCheck.test(username);

让我解释一下你的正则表达式出了什么问题:

/^[A-Za-z]+\w\d*$/

你正确匹配,第一个字符只是一个字母。 然而,'+' 只能确保它至少匹配一次。 如果你想匹配某些东西的确切次数,你可以 append '{x}' 到你的匹配案例。 如果您想匹配最小和最大次数,可以使用 append '{min, max}'。 在你的情况下,你只有一个下限(2 次),所以最大值保持为空,意味着无限次:{2,}

在你的 [2 - unlimited] 个字母之后,你想要 [0 - unlimited] 个数字。 '\w' 也匹配字母,所以我们可以删除它。 正则表达式的末尾是正确的,因为 '\d' 匹配任何数字,而 '*' 量化范围 [0 - 无限制] 的前一个匹配项。

我建议使用 regex101.com 来测试和开发正则表达式模式。 您可以测试您的字符串并获得关于所有标签的非常好的文档和解释。 我将带有一些示例字符串的正则表达式添加到此链接: https://regex101.com/r/qPmwhG/1

匹配的字符串将被突出显示,其他字符串不突出显示。

您可以在第一个字母^[az]之后使用交替来要求[az]+一个或多个字母后跟\d*任意数量的数字| \d{2,}两个或更多数字,直到字符串的$结尾

let userCheck = /^[a-z](?:[a-z]+\d*|\d{2,})$/i;

请参阅 regex101 中的此演示- 与i -标志(忽略大小写)一起使用以将[A-Za-z]缩短为[az]


PS :刚刚在一些迟来的咖啡☕更新了我的答案。 之前误读了问题并同时删除了我的答案。 我也会错过我刚刚在其他答案评论中读到的例如Z97的部分。 这比乍一看更具挑战性......显然:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM