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

Ale*_*exD 7 javascript regex multilingual hashtag

我的应用程序中有一个字段,用户可以在其中输入主题标签。\n我想验证他们的输入并确保他们输入正确的主题标签。\n它可以采用任何语言,并且前面不应带有# 符号。 \n我正在用 JavaScript 编写。

\n\n

所以以下是很好的例子:

\n\n
    \n
  • Abcde45454_fgfgfg(很好,因为:只有字母、数字和 _)
  • \n
  • 2014_is-the-year(很好,因为:只有字母、数字、_ 和 -)
  • \n
  • \xd7\x91\xd7\xa8_\xd7\xa8\xd7\xa4\xd7\x90\xd7\x9c\xd7\x99 (好,因为:只有字母和 _)
  • \n
  • \xd0\xb0\xd1\x80\xd0\xb1\xd1\x83\xd0\xb7 (好,因为:只有字母)
  • \n
\n\n

以下是不好的例子:

\n\n
    \n
  • 丹·布朗(不好,因为有空格)
  • \n
  • 我的天啊!!!!!(不好是因为有!)
  • \n
  • \xd7\x91\xd7\xa8 \xd7\xa8\xd7\xa4@\xd7\x9c\xd7\x99 (不好,因为有 @ 和空格)
  • \n
\n\n

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

\n\n

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

\n\n
    \n
  1. 其他语言无法使用
  2. \n
  3. 再次强调,只有英文
  4. \n
\n\n

[编辑]

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

Luc*_*ski 5

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

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

演示

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

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