正则表达式为有效的主题标签

时间:2017-02-06 10:46:06

标签: javascript regex

我需要正则表达式来验证主题标签。每个#标签都应以#标签开头("#")。

有效输入:

1. #hashtag_abc

2. #simpleHashtag

3. #hashtag123

输入无效:

1. #hashtag#

2. #hashtag@hashtag

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

有关如何操作的建议吗?

5 个答案:

答案 0 :(得分:5)

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

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

尝试以下正则表达式:

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

它将关闭上述边缘情况,并且:

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

这是link to the demo

答案 1 :(得分:1)

有两个问题:

如果你想要一个完整的字符串匹配,你可能还需要锚(^ / $)。

使用

/^#\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