用于匹配任何语言的HashTag的正则表达式

时间:2014-12-07 13:12:42

标签: javascript regex multilingual hashtag

我的应用程序中有一个字段,用户可以在其中输入主题标签。 我想验证他们的条目,并确保他们输入适当的HashTag。 它可以是任何语言 NOT 前面应该带#符号。 我是用JavaScript写的。

以下是好的例子:

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

以下是不好的例子:

  • 丹·布朗(因为有空格而坏)
  • OMG !!!!! (因为有坏!)
  • בררפ@לי(坏因为有@和空格)

我们有一个仅匹配a-zA-Z0-9的正则表达式,我们需要添加语言支持,所以我们将其更改为忽略空格并忘记忽略特殊字符,所以我在这里。

我看到的其他一些StackOverflow示例但对我不起作用:

  1. Other languges don't work
  2. Again, English only
  3. [编辑]

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

2 个答案:

答案 0 :(得分:2)

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

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

Demo

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

不幸的是,您无法在JavaScript的正则表达式中使用\p{P}(Unicode标点符号)等结构,因此如果正则表达式解决方案不是&#39,您基本上必须将字符列入黑名单或采用不同的方法; t足以满足您的需求。

答案 1 :(得分:1)

我不明白为什么这个问题得不到更多票。多种语言的标签检测是一个问题。我能找到的唯一可行的选择是上面的卢卡斯发布的(其他所有选项都不那么好用。)

尽管需要修改:

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

DEMO

这不仅检测字符串的开头,还检测所有主题标签,修复未转义的字符,并删除末尾不必要的$