Regex用于匹配任何语言的hashtag

2022-05-11 00:00:00 regex javascript multilingual hashtag

我的应用程序中有一个字段,用户可以在其中输入hashtag。 我想验证他们的条目,并确保他们输入一个适当的标签。 它可以使用任何语言,并且不应在前面加#符号。 我正在用Java脚本写作。

下面是很好的例子:

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

和以下是不好的例子:

  • Dan Brown(不好,因为有空位)
  • 天哪!(坏因为有!)
  • בררפ@לי(错误,因为有@和空格)

我们有一个仅与a-Za-z0-9匹配的正则表达式,我们需要添加语言支持,因此我们将其更改为忽略空格并忘记忽略特殊字符,因此我来了。

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

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

[编辑]

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

解决方案

如果您的禁止字符列表是完整的(!@#$%^&*()=+./,[{]};:'"?><),则正则表达式为:

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

Demo

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

遗憾的是,您不能在JavaScript的正则表达式中使用p{P}(Unicode标点符号)这样的结构,因此,如果正则表达式解决方案不能满足您的需求,您基本上必须将字符列入黑名单或采取不同的方法。

相关文章