有效输入:
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
它将解决上述边缘情况,此外:
这里是演示的链接:https://regex101.com/r/78GYyD/5。
回答当前问题...
有两个问题:
[A-z]
允许使用除字母字符外的其他字符([, , ], ^, _, `
)由于您正在验证整个字符串,因此还需要锚点(^
和$
)以确保完全匹配字符串:
/^#\w+$/
请查看正则表达式演示。
如果您想从较长的文本中提取特定的有效标签...
这是一个额外的部分,因为很多人寻求提取(而不是验证)标签,所以这里有一些解决方案供您参考。只需注意JavaScript(以及许多其他正则表达式库)中的\w
等于[a-zA-Z0-9_]
:
#\w{1,30}\b
- 以#
字符开头,后面跟着一到三十个单词字符,最后以单词边界结束\B#\w{1,30}\b
- #
字符要么在字符串开头,要么在非单词字符后面,然后是一个到三十个单词字符(即字母、数字或下划线),最后以单词边界结束\B#(?![\d_]+\b)(\w{1,30})\b
- #
字符要么在字符串开头,要么在非单词字符后面,然后是一个到三十个单词字符(即字母、数字或下划线),但不能仅由数字和下划线组成,最后以单词边界结束。最后但并非最不重要的,这里有一个来自https://github.com/twitter/twitter-text/tree/master/js..的Twitter标签正则表达式。很抱歉,太长了无法在SO帖子中粘贴,这里是它的链接:https://gist.github.com/stribizhev/715ee1ee2dc1439ffd464d81d22f80d1。
#hashtag123
。 - Ashok/^#\w+$/
匹配,因为#
匹配一个井号,\w+
匹配1个或多个ASCII字母、数字或下划线。锚点要求完整字符串匹配。请参见此正则表达式演示。 - Wiktor StribiżewUnicode的一般类别可以帮助完成这个任务:
/^#[\p{L}\p{Nd}_]+$/gu
我使用 \p{L} 和 \p{Nd} Unicode 类别来匹配任何字母或十进制数字。您可以为您的正则表达式添加任何必要的类别。完整的类别列表可以在此处找到:https://unicode.org/reports/tr18/#General_Category_Property
正则表达式实时演示: https://regexr.com/5tvmo
/#[a-zA-Z0-9_]+/
这将只包括字母、数字和下划线。#
或 #######
后面紧跟着一个空格。 - Toto\S
前面的点(.
),现在它不接受#
后面的空格了。 - Ajay Lingayat#*%$£;,
,不确定它是否是一个有效的标签。 - Toto#\w+
。 - Ajay Lingayat(?<=(\s|^))#[^\s\!\@\#\$\%\^\&\*\(\)]+(?=(\s|$))
使用时请打开“g”和“m”标志!
已通过https://regex101.com和VSCode工具测试,适用于Java和JavaScript语言。
可在this repo上获取。
/\B(?:#|пјғ)((?![\p{N}_]+(?:$|\b|\s))(?:[\p{L}\p{M}\p{N}_]{1,60}))/ug
_
зҡ„еӯ—з¬ҰгҖӮ_
зҡ„ж•°еӯ—гҖӮиҝҷжҳҜUnicodeжӯЈеҲҷиЎЁиҫҫејҸпјҢеҰӮжһңжӮЁдҪҝз”ЁPythonпјҢеҲҷеҸҜиғҪйңҖиҰҒе®үиЈ…regexгҖӮ
жөӢиҜ•й“ҫжҺҘпјҡhttps://regex101.com/r/NLHUQh/1
在文本中检测哈希标签的有用且经过测试的正则表达式
/(^|\s)(#[a-zA-Z\d_]+)/ig
有效匹配哈希标签的示例: #abc #ab_c #ABC #aBC
(?:^|\B)
。 - Luke#invalid#invalid #invalid@ invalid#invalid ##invalid
这样的情况。 - minusf