分类
regex

正则表达式-判断不具有某些字段的字符串

做了一个安全中心项目,里面有一些密码验证,比较难的部分就是验证是否不具有某些字段的字符串了。

/^((?!boy|gril).)*$/

解析

/^((?!boy|gril).)*$/

这个星星举足轻重,有了它我们才能从开始到结尾,每一个位置都进行一次正则判定。

/^((?!boy|gril).)*$/

这个小点举足轻重,有了它才有了占位符,有了占位符才能做零宽度负预测先行断言(负前瞻,向后看看是否是我们不想要的内容,若是我们不想要的内容,则不通过此次正则判定)

/^((?!boy|gril).)*$/

负前瞻

/^((?!boy|gril).)*$/

如果没有开始它无法进行负预测,如果没有结尾它只要有一个位置符合后面没有boy或gril就会生效。

执行过程

  • 在^处判定后方是否有boy或gril,无保留占位符,
  • 在^.处判定后方是否有boy或gril
  • ……
  • 在^….$处判定后方是否有boy或gril,无,执行结束

在上方的某个步骤中判定中出现了boy或gril,则不符合正则的条件,跳出并返回false

(完)

2020-10-27补充

上述正则判断的是字符串在不具有boy的同时也不具有girl,要是我们想要判断的是可以有girl和boy但两者只能出现一个。

第一种情况,先遇到boy后不遇到gril

/^(?=(.boy))\1((?!gril).)$/

第二种情况,先遇到gril后不遇到boy

/^(?=(.gril))\1((?!boy).)$/

最终情况,遇到boy后不遇到gril或者遇到gril后不遇到boy结合在一起

/^((?=(.boy))\1((?!gril).)|(?=(.gril))\1((?!boy).))$/

由zhuishao

github:https://github.com/zhuishao/

发表评论

电子邮件地址不会被公开。 必填项已用*标注