使用纯Regex验证mDNS地址

30byixjq  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(111)

我需要验证给定的字符串是否是有效的mDNS地址。这些例子如下:

a2aadd61-85d9-4be6-a36c-267ad65917d3.local
ccd58700-cdd5-4c1f-8098-5bc306f1ce77.local
bb4115cd-1f39-42b0-9433-e59533c9c771.local
3b382824-24bf-457a-a7d6-b6e25e4d79bf.local
9284cbaa-2933-45e3-9ae2-c0cccae54b68.local
619281fb-6426-44fa-8d0f-9e58ce415e3e.local
541d8a99-b1a5-46f4-96f1-e31f30b3cb99.local
2feb782f-ea40-4a37-b843-5b5b4fe1860e.local

这可能吗?我是正则表达式的新手,似乎找不到这个特定字符串的正则表达式示例。这是我尝试做的一个正则表达式测试:

let valid = 'a2aadd61-85d9-4be6-a36c-267ad65917d3.local';
let invalid = 'not-valid-233q4q22eqwr-q3rhHE02n333r4tsefs.local';

let regex = \([a-zA-Z1-9]+){8}-([a-zA-Z1-9]){4}-([a-zA-Z1-9]){4}-([a-zA-Z1-9]){12}\.local\;

regex.test(valid)
dly7yett

dly7yett1#

  • 首先,正则表达式的文字分隔符不正确。它必须是斜线而不是反斜线。
  • 第二,第一个字符类的+量词不需要(甚至是错误的)。
  • 第三,“4个字符加破折号” 的子序列在一行中出现3次。OP的正则表达式没有反映这一点(它只覆盖了2次)。
  • 第四,除此之外,将其分组到括号中是没有用的。因此,一个正则表达式修复和优化所说的一切需要看起来接近... /^[a-z\d]{8}(?:-[a-z\d]{4}){3}-[a-z\d]{12}\.local$/i
const regXAddress =
  // see ... [https://regex101.com/r/6KWLm9/1]
  /^[a-z\d]{8}(?:-[a-z\d]{4}){3}-[a-z\d]{12}\.local$/i;

const testSample =
`a2aadd61-85d9-4be6-a36c-267ad65917d3.local
ccd58700-cdd5-4c1f-8098-5bc306f1ce77.local
bb4115cd-1f39-42b0-9433-e59533c9c771.local
3b382824-24bf-457a-a7d6-b6e25e4d79bf.local
9284cbaa-2933-45e3-9ae2-c0cccae54b68.local
619281fb-6426-44fa-8d0f-9e58ce415e3e.local
541d8a99-b1a5-46f4-96f1-e31f30b3cb99.local
2feb782f-ea40-4a37-b843-5b5b4fe1860e.local
2feb782f-e2a40-4a37-b843-5b5b4fe1860e.local
2feb78f-ea40-4a37-b8432-5b5b4fe1860e.local
2feb78f-ea40-4a37-b8432-5b5b4fe1860.local`;

console.log(
  testSample
    .split(/\n/)
    .map(address =>
      `'${ address }' is ${ regXAddress.test(address) ? '' : 'in' }valid`
    )
    .join('\n')
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
jq6vz3qz

jq6vz3qz2#

我用这个让它工作:

let valid = 'a2aadd61-85d9-4be6-a36c-267ad65917d3.local';
let invalid = 'not-valid-233q4q22eqwr-q3rhHE02n333r4tsefs.local';

let regex = /(^[a-zA-Z1-90]{8})-([a-zA-Z1-90]{4})-([a-zA-Z1-90]{4})-([a-zA-Z1-90]{4})-([a-zA-Z1-90]{12})\.local/;

console.log(regex.test(valid)) //=> true
console.log(regex.test(invalid)) //=> false
  • 以提问者名义发布 *

相关问题