在 JavaScript 中检查与 UUIDv4 的模式匹配

问题描述 投票:0回答:2

我正在寻找与 uuid 之前和之后的特定字符串的模式匹配。

例如

user/a24a6ea4-ce75-4665-a070-57453082c256/photo/a24a6ea4-ce75-4665-a070-57453082c256

const regexExp = new RegExp(/^user\/[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i);

console.log(regexExp.test("user/a24a6ea4-ce75-4665-a070-57453082c256")); // true

console.log(regexExp.test("user/a24a6ea4-ce75-4665-a070-57453082c256/photo")); // false

我期望的是匹配

user/{uuid}/*
如何在uuid后面使用通配符?

javascript regex pattern-matching uuid
2个回答
4
投票

如果您想匹配两者,则可以省略使用 RegExp 构造函数,因为您已经在使用文字,并且可以选择匹配

/
后跟字符串的其余部分。

[4]
可以只是
4

const regexExp = /^user\/[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}(?:\/.*)?$/i;

参见 regex101 演示

const regexExp = /^user\/[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}(?:\/.*)?$/i;

[
  "user/a24a6ea4-ce75-4665-a070-57453082c256",
  "user/a24a6ea4-ce75-4665-a070-57453082c256/photo",
  "user/a24a6ea4-ce75-4665-a070-57453082c256asdasd"
].forEach(s =>
  console.log(`${s} --> ${regexExp.test(s)}`)
);


0
投票

流行的 uuidjs/uuid 项目提供了

uuid.validate()
函数,该函数使用 以下 REGEX 进行 UUID 验证

/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i

我建议使用此正则表达式作为您的解决方案的基础。

添加

user/$UUID/*
的自定义要求并删除
00000000-0000-0000-0000-000000000000
后,您将得到以下内容:

/^user\/([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})(?:\/.*)?$/i

参见 regex101 演示

const regexExp = /^user\/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}(?:\/.*)?$/i;

[
  "user/a24a6ea4-ce75-4665-a070-57453082c256",
  "user/a24a6ea4-ce75-4665-a070-57453082c256/photo",
  "user/a24a6ea4-ce75-4665-a070-57453082c256/",
  "user/00000000-0000-0000-0000-000000000000",
  "user/a24a6ea4-ce75-4665-a070-57453082c256asdasd",
].forEach(s =>
  console.log(`${s} --> ${regexExp.test(s)}`)
);

© www.soinside.com 2019 - 2024. All rights reserved.