Javascript 为用户名编写正则表达式

Javascript 为用户名编写正则表达式,javascript,regex,mongodb,mongoose,Javascript,Regex,Mongodb,Mongoose,我希望我的mongoose模式使用正则表达式来测试用户名是否只包含字母、数字和下划线、破折号或点。到目前为止我得到的是 /[a-zA-Z0-9-389;/ 但不知怎的,它让一切都过去了 如果正则表达式包含任何包含的字符,则将其设置为匹配字符串,但它不能确保字符串完全由这些字符组成 例如,/[a-zA-Z0-9-557;]/.test(“a&”)返回true,因为字符串包含字母a,而不管它还包括& 若要确保所有字符都是所需字符之一,请使用与字符串开头匹配的正则表达式,然后使用所需字符后跟一个量词

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

<代码>/[a-zA-Z0-9-389;/
但不知怎的,它让一切都过去了

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

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

若要确保所有字符都是所需字符之一,请使用与字符串开头匹配的正则表达式,然后使用所需字符后跟一个量词
+
(a加号表示前一组中的一个或多个,a
*
表示零或多个),然后使用字符串结尾
$
。因此:

const reg=/^[a-zA-Z0-9-u30;+$/
console.log(reg.test(“”)//false
console.log(reg.test(“I-am_valid.”)命令)//true
console.log(reg.test(“I-am\u not&”)//false
用start(
^
)和end(
$
)这样尝试

请参见演示:

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

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

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

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


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

当它不应该匹配时,它与什么匹配?你能给出一些输入、预期输出和实际输出的例子吗?很小的挑剔,当一个
出现在一个字符组中时(在
[]
内),它已经被逐字解释了,不需要转义。当它们是字符类的一部分时,你不需要转义点。
^[a-zA-Z0-9-_.]+$