冒号在javascript的正则表达式中

Raj*_*esh 5 javascript regex

我有一个正则表达式:

/^([a-zA-Z0-9_ -.''""]+)$/
Run Code Online (Sandbox Code Playgroud)

它工作得很好,允许字母,数字和一些特殊字符,如-,.,'".

不,我希望它也允许冒号(:).我尝试了以下正则表达式,但它失败了 - 它开始允许许多其他特殊字符.

/^([a-zA-Z0-9_ :-.''""]+)$/
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?

Kob*_*obi 8

-在字符类中有特殊含义,就像在a-z.试试这个:

/^([a-zA-Z0-9_ :\-.'"]+)$/
Run Code Online (Sandbox Code Playgroud)

-.(空间点)允许一些额外的字符,如#,$和更多.如果这是故意的,请尝试:

/^([a-zA-Z0-9_ -.'":]+)$/
Run Code Online (Sandbox Code Playgroud)

此外,要知道你不必多次包含任何角色,这是毫无意义的.'并且"每次出现两次,它们可以安全地被移除.

顺便说一下,在字符表中的点后面出现一个冒号,表示正则表达式无效.它不应该允许额外的字符,你可能会得到一个错误.在Firefox中,你得到:.invalid range in character class


cod*_*ict 5

您可以使用:

/^([a-zA-Z0-9_ :.'"-]+)$/
Run Code Online (Sandbox Code Playgroud)

我已经移动-到字符类的末尾,因此它按字面处理而不是作为范围运算符.您的原始正则表达式中也存在同样的问题,其中-被视为范围运算符.

此外,我已经下降了冗余'"来自焦炭类.