为用户名写一个正则表达式

时间:2017-12-30 00:38:42

标签: javascript regex mongodb mongoose

我希望我的mongoose架构使用正则表达式来测试用户名是否只包含字母,数字和下划线,短划线或点。到目前为止我得到的是

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

但不知怎的,它让传递一切。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

尝试使用start(^)和end($),

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

enter image description here

请参阅演示:https://regex101.com/r/6v0nNT/3

答案 2 :(得分:-1)

  

/ ^([A-ZA-Z0-9] | [。-_ \])* $ /

这个正则表达式应该可行。

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

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

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