如何组合正则表达式,在javascript中动态分组它们?



我需要从下面的 JSON 中使用 allowPattern、MinLength 和 MaxLength 属性来形成正则表达式。我正在使用分组,它工作正常。

1) "DomainNetBIOSName" : {
"Description" : "NetBIOS name of the domain (upto 15 characters) for users of earlier versions of Windows e.g. CORP",
"Type" : "String",
"MinLength" : "3",
"MaxLength" : "15",
"AllowedPattern" : "[a-zA-Z0-9]+"
},   

从上面使用 minlength、maxlength 和允许模式的 json 中,我将像这样形成正则表达式 - ([a-zA-Z0-9]+({3,15} 它适用于验证。

现在如果我有这样的 json -

2)  "SourceCidrForRDP" : {
"Description" : "IP Cidr from which you are likely to RDP into the instances. You can add rules later by modifying the created security groups e.g. 54.32.98.160/32",
"Type" : "String",
"MinLength" : "9",
"MaxLength" : "18",
"AllowedPattern" : "^([0-9]+.){3}[0-9]+/[0-9]+$"
}

正则表达式的分组不适用于此示例-

From above json using same logic forming the regex like this - (^([0-9]+.){3}[0-9]+/[0-9]+$){9,18}$ which failing because of added length validation {9,18}. 

我想使用 minLength、maxLength 和 allow 模式形成一个组合正则表达式。需要一个适用于所有此类情况的解决方案吗?

{min, max}

不表示匹配的最小长度最大长度。它说">在最小最大时间之间匹配以前的令牌"。

这意味着第一个似乎有效的正则表达式(([a-zA-Z0-9]+){3,15}(不起作用。它将匹配所有字母数字序列,即使它超过 15 个字符。

你想要的是这个:^([a-zA-Z0-9]{3,15})$(不带+(。它将匹配 3 到 15 次之间的单个字母数字字符,并对生成的序列进行分组。它不接受短于 3 个字符的字符串和长度超过 15 个字符的字符串。

对于您的第二个正则表达式,不需要minLengthmaxLength,正则表达式可以强制字符串表示 IP CIDR:

^((?:d{1,3}.){3}d{1,3})/(d{1,2})$(正则表达式解释(

这将检索IP并将其分为两组:192.168.0.024当给定192.168.0.0/24时。

因此,不需要最小和最大长度,因为正则表达式已经强制用户遵循模式。您可以删除 minLength 和 maxLength 检查(或将其设置为可选,具体取决于您的正则表达式是否需要它(。

最新更新