我需要正则表达式来验证主题标签。每个#标签都应以#标签开头("#")。
有效输入:
1. #hashtag_abc
2. #simpleHashtag
3. #hashtag123
输入无效:
1. #hashtag#
2. #hashtag@hashtag
我一直在尝试使用此正则表达式/#[a-zA-z0-9]/
,但它也接受了无效输入。
有关如何操作的建议吗?
答案 0 :(得分:5)
当前接受的答案在几个地方失败了:
尝试以下正则表达式:
/(^|\B)#(?![0-9_]+\b)([a-zA-Z0-9_]{1,30})(\b|\r)/g
它将关闭上述边缘情况,并且:
答案 1 :(得分:1)
有两个问题:
[A-z]
allows more than just letter chars([, \, ], ^, _, `
)如果你想要一个完整的字符串匹配,你可能还需要锚(^
/ $
)。
使用
/^#\w+$/
请参阅regex demo。
答案 2 :(得分:0)
你可以试试这个:/#[a-zA-Z0-9_]+/
这将只包括字母、数字和下划线。
答案 3 :(得分:0)
匹配任何主题标签的正则表达式代码。
在这种方法中,除了主符号 !@#$%^&*()
(?<=(\s|^))#[^\s\!\@\#\$\%\^\&\*\(\)]+(?=(\s|$))
使用时打开“g”和“m”标志!
它通过 https://regex101.com 和 VSCode 工具针对 Java 和 JavaScript 语言进行了测试。
它在 this repo 可用。
答案 4 :(得分:0)
Unicode 常规类别可以帮助完成该任务:
/^#[\p{L}\p{Nd}_]+$/gu
我使用 \p{L} 和 \p{Nd} Unicode 类别来匹配任何字母或十进制数字。您可以为正则表达式添加任何必要的类别。可以在此处找到完整的类别列表:https://unicode.org/reports/tr18/#General_Category_Property
正则表达式现场演示: https://regexr.com/5tvmo