我有一个正则表达式:
/^([a-zA-Z0-9_ -.''""]+)$/
它可以很好地使用字母,数字和一些特殊字符,例如-
,.
,'
和"
。
不,我也希望它也允许冒号(:
)。我尝试了以下正则表达式,但它失败了 - 它开始允许许多其他特殊字符。
/^([a-zA-Z0-9_ :-.''""]+)$/
知道为什么吗?
答案 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_ \-.'":]+)$/