为用户名编写正则表达式

Posted

技术标签:

【中文标题】为用户名编写正则表达式【英文标题】:Write a regex for usernames 【发布时间】:2018-06-10 07:46:31 【问题描述】:

我想要一个用于我的 mongoose 架构的正则表达式来测试用户名是否仅包含字母、数字和下划线、破折号或点。到目前为止我得到的是

/[a-zA-Z0-9-_.]/

但不知何故,它让一切都过去了。

【问题讨论】:

它不应该匹配什么?你能给出一些示例输入、预期输出和实际输出吗? 【参考方案1】:

/^([a-zA-Z0-9]|[-_\.])*$/

这个正则表达式应该可以工作。

^ 匹配字符串的开头。 $ 匹配字符串的末尾。这意味着它会检查整个字符串。

* 允许它匹配任意数量的字符或字符序列。这是匹配整个密码所必需的。

现在需要括号,因为有一个 | (或)在这里使用。第一段是您已经包含的内容,它用于大写/小写字母和数字。括号的第二个区域用于其他字符。这 。必须用反斜杠转义,因为它是正则表达式中的保留字符,用于表示某事可以是任何字符。

【讨论】:

当它们是字符类的一部分时,您不需要转义点。 ***.com/questions/19976018/…【参考方案2】:

用 start(^) 和 end($) 试试这样,

^[a-zA-Z0-9-_.]+$

查看演示:https://regex101.com/r/6v0nNT/3

【讨论】:

小点点滴滴,原来当.出现在一个字符组中时(在[]里面,已经是字面解释了,不用转义了。【参考方案3】:

如果字符串包含任何包含的字符,则您的正则表达式设置为匹配字符串,但它不能确保字符串完全由这些字符组成。

例如,/[a-zA-Z0-9-_.]/.test("a&") 返回 true,因为字符串包含字母 a,而不管它还包含 &

要确保所有字符都是您想要的字符之一,请使用匹配字符串开头的正则表达式 ^,然后是您想要的字符,后跟一个量词 +(加号表示前面的一个或多个设置,* 表示零个或多个),然后字符串结束 $。所以:

const reg = /^[a-zA-Z0-9-_.]+$/

console.log(reg.test("")) // false
console.log(reg.test("I-am_valid.")) // true
console.log(reg.test("I-am_not&")) // false

【讨论】:

以上是关于为用户名编写正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何编写正则表达式以仅返回此字符串的某些部分?

编写将过滤输入的用户名的正则表达式

在正则表达式中转义特殊字符

从 glob 表达式创建正则表达式

如何编写一个正则表达式命令在 python 中将字符串转换为日期时间格式?

为 W00001 之类的模式编写正则表达式