正则表达式里面我有一个正则表达式:结肠癌的JavaScript
/^([a-zA-Z0-9_ -.''""]+)$/
它工作得很好,允许字母,数字和一些特殊字符,如-
,.
,'
和"
。
不,我希望它也允许冒号(:
)。我尝试了以下正则表达式,但它失败 - 它开始允许许多其他特殊字符。
/^([a-zA-Z0-9_ :-.''""]+)$/
任何想法为什么?
正则表达式里面我有一个正则表达式:结肠癌的JavaScript
/^([a-zA-Z0-9_ -.''""]+)$/
它工作得很好,允许字母,数字和一些特殊字符,如-
,.
,'
和"
。
不,我希望它也允许冒号(:
)。我尝试了以下正则表达式,但它失败 - 它开始允许许多其他特殊字符。
/^([a-zA-Z0-9_ :-.''""]+)$/
任何想法为什么?
-
在字符类中有特殊含义,就像在a-z
中一样。试试这个:
/^([a-zA-Z0-9_ :\-.'"]+)$/
-.
(空间点)允许一些额外的字符,如#
,$
多。如果这是故意的,请尝试:
/^([a-zA-Z0-9_ -.'":]+)$/
另外,请注意,您不必多次包含任何字符,这是毫无意义的。 '
和"
每次出现两次,他们可以安全地删除。
顺便说一声,冒号后出现点character table,表示正则表达式无效。它不应该允许多余的字符,你应该得到一个错误。在Firefox中,您会得到:invalid range in character class
。
该表达式可能是错误的开始。你有/^([a-zA-Z0-9_ -.''""]+)$/
你可能的意思是/^([a-zA-Z0-9_ \-.''""]+)$/
(注意破折号前面的反斜杠)。 []
中的-
表示范围,所以-.
(空格虚线点)的意思是“从空间到点”,如果将冒号放在那里,它只会改变该范围。
因此增加结肠和逃避破折号(和删除冗余'
和"
接近尾声),你可能想:/^([a-zA-Z0-9_ \-.'":]+)$/
谢谢。你是对的。 – Rajesh 2011-03-08 20:31:47
您可以使用:
/^([a-zA-Z0-9_ :.'"-]+)$/
我搬到-
到字符类的末尾,以便字面处理而不是范围运算符。您的原始正则表达式中也存在相同的问题,其中-
正在作为范围运算符处理。
另外我从char类中删除了多余的'
和"
。
谢谢。即使这个工作:) – Rajesh 2011-03-08 20:27:23
一个更可读的替代方案可能是将'-'移到字符类的开始或结尾(这也会使其失去其特殊含义)。 – 2011-03-08 19:35:36
@cebewee - 好的,那取决于。无论如何,我喜欢逃避它,以确保它的含义是明确的,并防止错误。另一个开发者可能会将'[a-z _-]'改为'[a-z_-〜]',然后我们遇到问题。 – Kobi 2011-03-08 19:39:05
+1,转义总是比较安全。 – codaddict 2011-03-08 19:40:24