2012-01-09 185 views
1

我使用下面的正则表达式:极品领域的正则表达式,应该允许特殊字符,字母数字字符和空格

[a-zA-Z0-9-#.()/%&\\s]{0,19}. 

为现场的要求是它应允许任何东西,字段大小应是19. 让我知道如果有任何更正。任何帮助表示赞赏。

+1

定义“特殊字符”... – JohnC 2012-01-09 15:06:09

+0

!@#$%^&*()_ + | ...所有这些 – 1078081 2012-01-09 15:42:20

+0

定义您的每个术语,否则您将得不到正确的答案。 – tchrist 2012-01-09 16:34:06

回答

1

您只需要转义特殊字符。尝试:

[a-zA-Z0-9\-#\.\(\)\/%&\s]{0,19} 

您可以在http://rubular.com/

+0

+1你基本上是对的。我唯一的评论是,根据正在使用的正则表达式引擎,某些特殊字符不需要转义。例如,如果某些引擎在范围后面使用,则不需要'-'来逃脱,因为引擎可以发现第二个'-'不可能是另一个范围的一部分。不过,如果有疑问,转义是安全的。 – ean5533 2012-01-09 15:13:22

+0

我正在使用休眠验证器 – 1078081 2012-01-09 15:25:31

0

测试你的正则表达式就逃脱破折号-或把它在开始时或在字符类的末尾:

[a-zA-Z0-9\\-#.()/%&\\s]{0,19} 

[-a-zA-Z0-9#.()/%&\\s]{0,19} 

[a-zA-Z0-9#.()/%&\\s-]{0,19} 
+0

当你不逃脱连字符时,JSLint不喜欢。为了一致性,一个转义角色不会杀了你。 – canon 2012-01-09 15:14:23

+0

'echo你好| egrep'[a-zA-Z0-9 \ - #。()/%&\\ s] {0,19}''返回egrep:无效范围结束符。 – ghoti 2012-01-09 15:14:51

+0

@ghoti:在CentOS上为我工作 – Toto 2012-01-09 15:23:50

0

你的正则表达式至少有一种不正确 - 如果你考虑连字符是一个“特殊字符”,那么你应该把它放在范围的开始或结束。所以:[a-zA-Z0-9#.()/%&\s-]{0,19}

在正则表达式本身的上下文中“特殊”的字符如果在范围内,通常不会被解析。所以你可以用.,()。但请检查您的解析器以确保它理解\s的含义。放置空间可能会更简单。另外,如果你的正则表达式解析器倾向于用斜杠分隔正则表达式,那么你可能不得不在范围中间跳过斜线:[a-zA-Z0-9#.()\/%&\s-]{0,19}

相关问题