正则表达式表示大写和小写+数字或其他非字母

Regex for upper and lower+numbers or other non-alphabetic

本文关键字:其他 数字 表示 正则表达式      更新时间:2023-09-26

在这里查看我的帖子

正则表达式至少为 8 + 上下 + 数字或其他非字母顺序

假设我只需要下面的 2 个条件,正则表达式应该是什么?

  1. 包含大写和小写字母。
  2. 包含数字或其他非字母字符。

我试过^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])$但不起作用

但只是—— - (?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])正在工作

我可以只使用(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])来实现目的吗?

这里的问题是前/后看是零宽度,"非消耗"。这意味着您的

^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])$

永远不会匹配,因为环顾四周什么都没有消耗,然后剩下什么? 只有^$与空字符串匹配,但这不符合您的前瞻条件。

所以你应该使用

^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z]).*$

.*将消耗一切,展望未来确保标准。

您还可以定义一个长度,将*替换为 {x,}其中 x 是字符串的最小字符数

^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])$

这意味着:字符串的开头后跟任何包含小写或大写或非字母的内容,但下一个位置必须是字符串的结尾 - 这不可能发生。

您在上一个问题中接受的 aswer 没问题,有什么问题吗?在这里,您可以阅读有关正则表达式中断言的更多信息 http://cz.php.net/manual/en/regexp.reference.assertions.php