regex 有效标签的正则表达式

nhjlsmyf  于 2022-12-27  发布在  其他
关注(0)|答案(7)|浏览(138)

我需要验证标签正则表达式。每个标签应该以标签("#")开始。
有效输入:
第一个月
2. #simpleHashtag
3. #hashtag123
无效输入:
1. #hashtag#
2. #hashtag@hashtag
我一直在尝试使用这个正则表达式/#[a-zA-z0-9]/,但它也接受无效输入。
有什么建议怎么做吗?

mpgws1up

mpgws1up1#

目前公认的答案在以下几个方面是错误的:

  • 它接受没有字母的标签(例如"#11111"、"#___"都通过)。
  • 它将排除由空格分隔的标签("hey there #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

o8x7eapl

o8x7eapl2#

    • 要回答当前问题...**

有2个问题:

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

/^#\w+$/

参见regex demo

    • 如果要从较长文本中提取特定的有效标签...**

这是一个额外的部分,因为很多人都希望提取(而不是验证)hashtags,所以这里有几个解决方案。记住JavaScript(和许多其他正则表达式库)中的\w等于[a-zA-Z0-9_]

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

最后但并非最不重要的是,这里有一个来自https://github.com/twitter/twitter-text/tree/master/js..的***Twitter标签regex***。抱歉,太长了,无法粘贴到SO帖子中,它在这里:https://gist.github.com/stribizhev/715ee1ee2dc1439ffd464d81d22f80d1.

uubf1zoe

uubf1zoe3#

你可以试试这个:第一个月
这将只包括字母、数字和下划线。

kninwzqo

kninwzqo4#

匹配任何标签的正则表达式代码。
在这种方法中,除了主符号!@#$%^&*()之外,任何字符都可以在标签中使用

(?<=(\s|^))#[^\s\!\@\#\$\%\^\&\*\(\)]+(?=(\s|$))

用法说明

使用时打开“g”和“m”标志!
它通过https://regex101.com和VSCode工具测试Java和JavaScript语言。
它在this repo上可用。

vltsax25

vltsax255#

Unicode常规分类可以帮助完成这项任务:

/^#[\p{L}\p{Nd}_]+$/gu

我使用\p{L}和\p{Nd} unicode类别来匹配任何字母或十进制数字。您可以为您的正则表达式添加任何必要的类别。完整的类别列表可以在这里找到:https://unicode.org/reports/tr18/#General_Category_Property
Regex实时演示:https://regexr.com/5tvmo

amrnrhlw

amrnrhlw6#

用于检测文本中的hashtag的有用且经过测试的正则表达式

/(^|\s)(#[a-zA-Z\d_]+)/ig

有效匹配标签的示例:#abc #ab_c#ABC #aBC

hzbexzde

hzbexzde7#

标签正则表达式适用于任何语言
第一个月

  • 允许任何语言字符或带有数字或_的字符。
  • 不允许只有数字或数字带有_

它是unicode正则表达式,所以如果你使用Python,你可能需要安装[regex][1]。
来测试它https://regex101.com/r/NLHUQh/1

相关问题