2011-03-08 41 views
5

正则表达式里面我有一个正则表达式:结肠癌的JavaScript

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

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

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

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

任何想法为什么?

回答

8

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

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

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

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

另外,请注意,您不必多次包含任何字符,这是毫无意义的。 '"每次出现两次,他们可以安全地删除。

顺便说一声,冒号后出现character table,表示正则表达式无效。它不应该允许多余的字符,你应该得到一个错误。在Firefox中,您会得到:invalid range in character class

+0

一个更可读的替代方案可能是将'-'移到字符类的开始或结尾(这也会使其失去其特殊含义)。 – 2011-03-08 19:35:36

+0

@cebewee - 好的,那取决于。无论如何,我喜欢逃避它,以确保它的含义是明确的,并防止错误。另一个开发者可能会将'[a-z _-]'改为'[a-z_-〜]',然后我们遇到问题。 – Kobi 2011-03-08 19:39:05

+0

+1,转义总是比较安全。 – codaddict 2011-03-08 19:40:24

1

该表达式可能是错误的开始。你有/^([a-zA-Z0-9_ -.''""]+)$/你可能的意思是/^([a-zA-Z0-9_ \-.''""]+)$/(注意破折号前面的反斜杠)。 []中的-表示范围,所以-.(空格虚线点)的意思是“从空间到点”,如果将冒号放在那里,它只会改变该范围。

因此增加结肠和逃避破折号(和删除冗余'"接近尾声),你可能想:/^([a-zA-Z0-9_ \-.'":]+)$/

+0

谢谢。你是对的。 – Rajesh 2011-03-08 20:31:47

5

您可以使用:

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

我搬到-到字符类的末尾,以便字面处理而不是范围运算符。您的原始正则表达式中也存在相同的问题,其中-正在作为范围运算符处理。

另外我从char类中删除了多余的'"

+0

谢谢。即使这个工作:) – Rajesh 2011-03-08 20:27:23