【发布时间】:2018-06-10 07:46:31
【问题描述】:
我想要一个用于我的 mongoose 架构的正则表达式来测试用户名是否仅包含字母、数字和下划线、破折号或点。到目前为止我得到的是
/[a-zA-Z0-9-_.]/
但不知何故,它让一切都过去了。
【问题讨论】:
-
它不应该匹配什么?你能给出一些示例输入、预期输出和实际输出吗?
标签: javascript regex mongodb mongoose
我想要一个用于我的 mongoose 架构的正则表达式来测试用户名是否仅包含字母、数字和下划线、破折号或点。到目前为止我得到的是
/[a-zA-Z0-9-_.]/
但不知何故,它让一切都过去了。
【问题讨论】:
标签: javascript regex mongodb mongoose
/^([a-zA-Z0-9]|[-_\.])*$/
这个正则表达式应该可以工作。
^ 匹配字符串的开头。 $ 匹配字符串的末尾。这意味着它会检查整个字符串。
* 允许它匹配任意数量的字符或字符序列。这是匹配整个密码所必需的。
现在需要括号,因为有一个 | (或)在这里使用。第一段是您已经包含的内容,它用于大写/小写字母和数字。括号的第二个区域用于其他字符。这 。必须用反斜杠转义,因为它是正则表达式中的保留字符,用于表示某事可以是任何字符。
【讨论】:
【讨论】:
.出现在一个字符组中时(在[]里面,已经是字面解释了,不用转义了。
如果字符串包含任何包含的字符,则您的正则表达式设置为匹配字符串,但它不能确保字符串完全由这些字符组成。
例如,/[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
【讨论】: