【求助过客兄】正则之四向原则

凤凰涅檠 2010-12-03 03:33:16
引用 http://msdn.microsoft.com/zh-cn/library/ms972966.aspx

(?=...) 正 Lookahead


问题:密码必须介于 4 到 8 个字符,且必须至少包含一个数字

正则:^(?=.*\d).{4,8}$



正则求解,这里用到了 ?= ,为什么需要用到它呢 ? 有何神奇的地方

对正则一知半解,希望前辈们不吝赐教。。。
...全文
189 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
凤凰涅檠 2010-12-03
  • 打赏
  • 举报
回复
哪一天能看到过客兄在我前面跑,我的正则就成功了
kinogam 2010-12-03
  • 打赏
  • 举报
回复
我来了


^(?:[^\d]|(\d)){4,8}(?(1)|(?!))$
不懂装懂 2010-12-03
  • 打赏
  • 举报
回复
打酱油
凤凰涅檠 2010-12-03
  • 打赏
  • 举报
回复
看来正则的路还很长,看不到头继续努力
NqIceCoffee 2010-12-03
  • 打赏
  • 举报
回复
学习



回复内容太短了!
-过客- 2010-12-03
  • 打赏
  • 举报
回复
漏了一个字符

^(?!\D+$)(?![A-Za-z]+$).{4,8}$
=>
^(?!\D+$)(?![^A-Za-z]+$).{4,8}$
porschev 2010-12-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lxcnn 的回复:]
基础语法规则及应用可以先参考

正则基础之——环视

然后我再说下这个问题吧
[/Quote]

刚看了一篇你的正则博客。。。慢慢消化。。。

下周再继续看
q107770540 2010-12-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lxcnn 的回复:]

基础语法规则及应用可以先参考

正则基础之——环视

然后我再说下这个问题吧
[/Quote]
学习 蹭分~
-过客- 2010-12-03
  • 打赏
  • 举报
回复
环视简单来讲,就是在所在位置的左侧或右侧加入一个限定条件,只作为限定条件而存在,匹配的内容不计入最后的匹配结果

首先分析需求,4到8个字符,可以写出正则
^.{4,8}$
但又要求至少包含一个数字,通过改变“.”是达不到这个目的的,这个时候可以考虑环视
从字符串开始位置加限定条件,有两种方式
1、在任意个非数字后,必须有一个数字 (?=\D*\d)
2、不能全是非数字 (?!\D+$)
对应的就可以写出两种思路的正则
1、^(?=\D*\d).{4,8}$
2、^(?!\D+$).{4,8}$

其实正向的顺序环视还是很好理解的,要说难点,也就是在位置的确定上
按楼主的需求,这个限定条件要加在开始位置,所以环视是接在“^”之后的,当然,如果限定条件加在结束位置,也可以使用逆序环视来实现,只不过效率通常没有顺序环视高,支持的语言也比较少

另外就是环视是不互斥的,也就是在一个位置可以加任意多个条件限制,比如再加个条件,必须有一个字母
^(?!\D+$)(?![A-Za-z]+$).{4,8}$
凤凰涅檠 2010-12-03
  • 打赏
  • 举报
回复
嗯嗯,我立马去看。。。
newdigitime 2010-12-03
  • 打赏
  • 举报
回复
?=表示当前位置之后必须是什么样的.

好比
几个人站成一排,队长在某两人之间插一牌子,声明"从此处往右数必须是中学生,而且必须有一个女生"

-过客- 2010-12-03
  • 打赏
  • 举报
回复
基础语法规则及应用可以先参考

正则基础之——环视

然后我再说下这个问题吧
silentwins 2010-12-03
  • 打赏
  • 举报
回复
简单来说,零宽断言,就是括号里面的匹配只作判断,不计入匹配的结果。

例如字符串"12.3",我要匹配小数点前面的"12"。
假若你用正则式"\d+\."可以匹配"12.",这样你获取这个字符串之后还要去掉小数点的处理。
假若你用正则式"\d+(?=\.)",匹配的就是"12",这样小数点就没有计入匹配结果了。

纯属个人理解,或者有其他优点没理解或者理解错误,欢迎过客GG批评。
凤凰涅檠 2010-12-03
  • 打赏
  • 举报
回复
Sf, 如果没有?=呢 ^(.*\d).{4,8}$ 这样有无不妥

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧