我需要用于验证主题标签的正则表达式。每个主题标签应以hashtag(“#”)开头。
有效输入:
1. #hashtag_abc
2. #simpleHashtag
3. #hashtag123
输入无效:
1. #hashtag#
2. #hashtag@hashtag
我一直在尝试使用此正则表达式,/#[a-zA-z0-9]/但它也接受无效的输入。
有什么建议吗?
当前接受的答案在以下几个地方失败:
尝试以下正则表达式:
/(^|\B)#(?![0-9_]+\b)([a-zA-Z0-9_]{1,30})(\b|\r)/g
Run Code Online (Sandbox Code Playgroud)
它将关闭上述边缘情况,此外:
回答当前的问题...
有2个问题:
[A-z] 允许的不仅仅是字母字符( [, , ], ^, _, `)由于您要验证整个字符串,因此还需要锚点 (^和$) 来确保完整的字符串匹配:
/^#\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。
| 归档时间: |
|
| 查看次数: |
3514 次 |
| 最近记录: |