2

我已经看到了很多执行逻辑 AND 的密码验证示例。例如,密码必须有

  • 至少一位数 (AND)
  • 至少一个字符 (AND)
  • 长度在 6 到 15 之间

这可以用正则表达式 'positive lookahead' 写成:

var includePattern = @"^(?=.*\d)(?=.*[a-zA-z]).{6,15}$"; 
bool tfMatch = Regex.IsMatch("Password1", includePattern); //
if (tfMatch)
    //continue... valid thus far...

我的问题是我想排除某些组或模式,本质上是做一个逻辑“或”;例如,假设我想匹配(如果以下任何一项为真,则使密码无效):

  • 至少找到一个空间(或)
  • 至少找到一个单引号 (OR)
  • 至少找到一个双引号 (OR)
  • 野兽的字符串“666”号

在 excludePattern 上寻求帮助 .. 积极前瞻?负前瞻?

var excludePattern = @"^( ...xxx...  $"; //<== **** what goes in here??
bool tfMatch = Regex.IsMatch("Pass 666 word", excludePattern); //
if (tfMatch)
    //DONT continue... contains excluded

我正在使用 c# 正则表达式,但任何风格都可以开始。

4

1 回答 1

0

就像您可以使用多个正向预读来检查字符串是否满足多个正向模式一样,您可以在负向预读中交替以检查预读中的交替模式是否与字符串匹配。例如,对于您的

至少找到一个空间(或)

至少找到一个单引号 (OR)

至少找到一个双引号 (OR)

野兽的字符串“666”号

您可以使用

^(?!.* |.*'|.*"|.*666)<rest of your pattern>

https://regex101.com/r/u9BoIl/1

于 2019-04-12T02:26:51.333 回答