冒号在javascript的正则表达式中

时间:2011-03-08 19:30:29

标签: javascript regex

我有一个正则表达式:

/^([a-zA-Z0-9_ -.''""]+)$/

它可以很好地使用字母,数字和一些特殊字符,例如-.'"

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

/^([a-zA-Z0-9_ :-.''""]+)$/

知道为什么吗?

3 个答案:

答案 0 :(得分:8)

-在角色类中具有特殊含义,就像在a-z中一样。试试这个:

/^([a-zA-Z0-9_ :\-.'"]+)$/

-.(空格到点)允许添加一些额外的字符,例如#$等。如果这是故意的,请尝试:

/^([a-zA-Z0-9_ -.'":]+)$/

另外,要知道你不必多次包含任何角色,这是毫无意义的。 '"每次出现两次,可以安全删除。

顺便说一句,在character table中的点之后出现的结果,该正则表达式无效。它不应该允许额外的字符,你可能会得到一个错误。在Firefox中,您会得到:invalid range in character class

答案 1 :(得分:5)

您可以使用:

/^([a-zA-Z0-9_ :.'"-]+)$/

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

此外,我还从char类中删除了多余的'"

答案 2 :(得分:1)

表达可能是错误的。你有/^([a-zA-Z0-9_ -.''""]+)$/你可能意味着/^([a-zA-Z0-9_ \-.''""]+)$/(注意短划线前面的反斜杠)。 -中的[]表示范围,因此-.(空格划线点)表示“从空格到点”,如果您将冒号放在那里,它只会更改范围。

因此,添加冒号并转义短划线(并删除末尾附近的多余'"),您可能需要:/^([a-zA-Z0-9_ \-.'":]+)$/