2014-12-07 36 views
0

我的应用程序中有一个字段,用户可以输入hashtag。 我想验证他们的条目,并确保他们输入什么是合适的HashTag。 它可以在任何语言和它应该不是前面带#号。 我正在用JavaScript编写。用于匹配任何语言的HashTags的正则表达式

所以下面就是很好的例子:

  • Abcde45454_fgfgfg(好,因为:只有字母,数字和_)
  • 2014_is-的一年(好,因为:字母,数字,_和 - )
  • בר_רפאלי(好,因为:只有字母和_)
  • арбуз(好,因为:只有字母)

而且FOLL由于是坏的例子:

  • 丹·布朗(坏,因为有一个空格)
  • OMG !!!!! (不好,因为有!)
  • בררפ@לי(坏,因为有@和空格)

我们有匹配只有-ZA-Z0-9一个正则表达式,我们需要添加语言支持等等我们改变它忽略空格,忘记忽略特殊字符,所以我在这里。

一些其他StackOverflow的例子我看到了,但对我没有工作:

  1. Other languges don't work
  2. Again, English only

[编辑]

  • 新增的解释,为什么不好就是不好好不错
  • 我不想要前面的#字符,但是如果我想在开头添加#,它应该是一个有效的标签
    • 基本上我不想允许任何特殊字符,比如@ @#$ %^ & *()= +/[{]} ;:'“> <
+0

不好的例子不包含'#'。那么究竟是什么你禁止的字符? – Leo 2014-12-07 13:17:45

+0

编辑我的问题添加解释和一些更多的信息。 谢谢! – AlexD 2014-12-07 13:29:10

+0

所以'#'前导是允许的,尽管你不喜欢,而其他地方的'#'是被禁止的,那是不是? – Leo 2014-12-07 13:34:41

回答

1

如果不允许的字符列表是透彻([email protected]#$%^&*()=+./,[{]};:'"?><),那么正则表达式是:?

^#?[^\[email protected]#$%^&*()=+./,\[{\]};:'"?><]+$ 

Demo

这允许可选的前导#符号:#?。它不允许使用负面字符类的特殊字符。我刚刚添加了\s到列表(空格),并且我逃过了[]

不幸的是,你不能在JavaScript的正则表达式中使用像\p{P}(Unicode标点符号)这样的结构,所以如果regex解决方案不够好,你基本上必须黑名单字符或采取不同的方法。

+0

由于OP与(扩展的)ASCII集之外的字符相匹配,因此您的建议将匹配该集之外的许多特殊字符(由OP授予,由其定义)。 – 2014-12-07 14:06:33

+0

@当然,我在最后一段中提到了这一点。我能想到的唯一的JS正则表达式解决方案将需要添加Unicode范围(如'[\ u2000- \ uF>''')。这留给OP的练习;) – 2014-12-07 14:12:11

+0

是的,这是一个很好的补充你的答案。 +1 – 2014-12-07 14:14:11