【发布时间】:2015-04-20 15:47:00
【问题描述】:
我是正则表达式的初学者,所以我被困在一些可能相当简单的东西上——或者可能不是,我只是不知道。也很抱歉,我将逐步介绍我的思考过程,不确定它是否真的有帮助。
无论如何,我想验证用户输入的值是否符合我列出的某些标准。它们是:
最大长度为 10
最小长度为 4
至少 4 个字母
可变的最小数字(当前为 0)
所以理论上 aa1aa2 的值会通过。
最初我从以下开始,它验证了 4 个小写或 4 个大写。
[a-z]{4}|[A-Z]{4}$
但是这不允许任何一个/或,这导致我更新它
([a-z]|[A-Z]){4}$
为了验证它是否包含必要的最小数字,我将其更改为:
(([a-z]|[A-Z]){4})([0-9]{0})$
我可以通过在某些情况下进行有效/失败的不同尝试来让人们厌烦,但基本上我开始注意到它只验证了有 4 个字母和一个数字的实例,我最终(在同事的帮助下)来了解决这个问题:
^(?!^[0-9]*$)(?!^[a-zA-Z]{4}$)^([a-zA-Z0-9]{4,10}$)
这几乎可以如我所愿。它将验证字符串的长度,以及是否有大写/小写,但只有当我包含一个数字时才会起作用。我在下半场(在 {4,10} 之前)尝试去除 0-0 并添加 {0} 的任何尝试都没有成功。基本上没有数字是行不通的!
如何修改最终的 sn-p 以便我可以设置一个可能有 0 个数字的子句?
【问题讨论】:
-
不是一个答案,而是一个建议:即使您创建了一个可以验证这四个条件的正则表达式,我不确定您是否可以,任何阅读您的代码的人都完全不可能理解它的意图。我建议将验证拆分为多个步骤,并使用单独的、更简单的表达式来验证每个步骤。
-
regexr.com 是一个非常酷的学习正则表达式和测试它的网站