正则表达式的有效标签

Ash*_*hok 2 javascript regex

我需要用于验证主题标签的正则表达式。每个主题标签应以hashtag(“#”)开头。

有效输入:

1. #hashtag_abc

2. #simpleHashtag

3. #hashtag123

输入无效:

1. #hashtag#

2. #hashtag@hashtag

我一直在尝试使用此正则表达式,/#[a-zA-z0-9]/但它也接受无效的输入。

有什么建议吗?

Nat*_*all 7

当前接受的答案在以下几个地方失败:

  • 它接受其中没有字母的主题标签(即“#11111”,“ #___”都通过)。
  • 它将排除以空格分隔的主题标签(“嘿,#friend”与“ #friend”不匹配)。
  • 它不允许您在标签上放置最小/最大长度。
  • 如果您决定将其他符号/字符添加到有效的输入列表中,它不会提供很大的灵活性。

尝试以下正则表达式:

/(^|\B)#(?![0-9_]+\b)([a-zA-Z0-9_]{1,30})(\b|\r)/g
Run Code Online (Sandbox Code Playgroud)

它将关闭上述边缘情况,此外:

  • 您可以将{1,30}更改为所需的最小值/最大值
  • 如果您希望以后可以在[0-9_]和[a-zA-Z0-9_]块中添加其他符号

这是演示链接


Wik*_*żew 6

回答当前的问题...

有2个问题:

由于您要验证整个字符串,因此还需要锚点 (^$) 来确保完整的字符串匹配:

/^#\w+$/
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

如果您想从较长的文本中提取特定的有效主题标签......

这是一个额外的部分,因为很多人都寻求提取(而不是验证)主题标签,因此这里有一些适合您的解决方案。请注意,\w在 JavaScript(以及许多其他正则表达式库)中等于[a-zA-Z0-9_]

  • #\w{1,30}\b- 一个#字符后跟一到三十个单词字符,后跟单词边界
  • \B#\w{1,30}\b-#位于字符串开头或非单词字符之后的字符,然后是 1 到 30 个单词(即字母、数字或下划线)字符,后面是 1 到 30 个单词字符,后面是单词边界
  • \B#(?![\d_]+\b)(\w{1,30})\b-#位于字符串的开头或非单词字符之后,然后是一到三十个单词(即字母、数字或下划线)字符(不能只是数字/下划线),后跟单词边界

最后但并非最不重要的一点是,这里是来自https://github.com/twitter/twitter-text/tree/master/js的Twitter 主题标签正则表达式。抱歉,粘贴SO帖子太长了,这里是: https: //gist.github.com/stribizhev/715ee1ee2dc1439ffd464d81d22f80d1