我希望我的mongoose架构使用正则表达式来测试用户名是否只包含字母,数字和下划线,短划线或点。到目前为止我得到的是
/[a-zA-Z0-9-_.]/
但不知怎的,它让传递一切。
答案 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)
答案 2 :(得分:-1)
/ ^([A-ZA-Z0-9] | [。-_ \])* $ /
这个正则表达式应该可行。
^匹配字符串的开头。 $匹配字符串的末尾。这意味着它会检查整个字符串。
*允许它匹配任意数量的字符或字符序列。这是匹配整个密码所必需的。
现在需要括号,因为有一个| (或)在这里使用。第一段是您已经包含的内容,它适用于大写/小写字母和数字。括号的第二个区域用于其他字符。的。必须使用反斜杠进行转义,因为它是正则表达式中的保留字符,用于表示某些内容可以是任何字符。