只匹配字母数字和一些特殊字符regex

pdtvr36n  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(86)

我正在使用NestJs,在使用以下正则表达式时遇到了一些问题。我需要匹配以单词开头的字母数字字符串,并允许一些字符-_'

@Matches(RegExp(/[\w'\-_]/), {
    message: 'provide a valid name',
  })
  name: string;

字符串
这允许在不允许的情况下传递URL等文本。
我也试过

@Matches(RegExp(/^[\w'\-_]$/), {
        message: 'provide a valid name',
      })
      name: string;


添加^$以匹配精确的字符串,在NestJs控制台输出中生成/^[\\w'-]$/
预期通过foofoo_foo-foo'
预期失败https://google.com-foo_foo'foo$foo

baubqpgj

baubqpgj1#

This regex ^[A-Za-z]+[A-Za-z-_']+$符合您指定的条件。(我已经根据你所说的应该通过和失败的内容向正则表达式中添加了单元测试)
本质上它做以下事情

  • 将单词的开头与字母字符匹配(不使用\w,因为它包含0-9和_
  • 将单词的其余部分与字母字符和您指定的三个字符(-_')匹配
  • 匹配单词的结尾

这应该不允许任何URL,因为它将包含.://。它应该禁止任何以'_-$或任何其他符号开头的单词,因为它不符合A-Za-z条件。
我发现regex101.com是学习、测试和可视化正则表达式的一个很好的资源。也许对你也有帮助

相关问题