为用户名编写正则表达式
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
【讨论】:
以上是关于为用户名编写正则表达式的主要内容,如果未能解决你的问题,请参考以下文章