【问题标题】:Regex for upper and lower+numbers or other non-alphabetic上下+数字或其他非字母的正则表达式
【发布时间】:2011-05-20 10:16:40
【问题描述】:

在这里查看我的帖子

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

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

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

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

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

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

【问题讨论】:

  • 这是用于传统的 7 位 ASCII,还是用于 Unicode?网络现在主要是 Unicode。

标签: javascript regex


【解决方案1】:

这里的问题是向前/向后看是零宽度,“非消耗”。这意味着你的

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

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

所以你应该使用

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

.* 将消耗一切,前瞻性确保标准。

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

【讨论】:

  • @tchrist,我想我会得到你的支持,因为我很好地解释了为什么表达不起作用;)。
【解决方案2】:
^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])$

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
相关资源
最近更新 更多