这篇打算八卦一点。从最简单的开始
一、验证一个字符串中必须是有字母数字组成的正则表达式
首先我们了解下/w,在不同的开发平台下他的含义是不同的。比如javascript中/w<==>[a-zA-Z0-9_]
而在c#中/w还包含了汉字等unicode编码字符
所以这个问题一定要排除使用/w
给出解决方案为:^[a-z0-9A-Z]+$
二、验证一个字符串中必须是由数字和字母组成,同时在6-15位
这个不废话了,直接给出解决方案吧,因为太啰嗦没意义
给出解决方案为:^[a-z0-9A-Z]{6,15}$
三、验证一个字符串中必须由数字和字母组成,同时在6-15位,并且必须是字母开头。
给出解决方案为:^[a-zA-Z][a-z0-9A-Z]{5,14}$
三、验证一个字符串中必须由数字和字母组成,同时在6-15位,并且必须有字母和数字。位置不固定
这个就比较有意思了,相对的。一个字符串中需要有字母和数字的话那么就不能全部是数字或者全部是字母。
用这个排除法的思路得到了一个答案
^(?![a-zA-Z]+$)(?![0-9]+$)[a-zA-Z0-9]{6,15}$
四、这个问题其实就是刚才才看到的问题
我现在给出这个答案。由于之间请教了逍遥大哥,才弥补了一个致命的缺陷。一开始我的写法是
^(?:(?![a-z][0-9]*[a-z])[a-z0-9]){6}$
意思是不存在一个2个字母,无论中间是否有数字,但是这样的排除法却忽视了一个字母都没有的情况
^(?!/d+$)(?:(?![a-z][0-9]*[a-z])[a-z0-9]){6}$
这里用到了2次环视,一个在里面一个在外面。看上去不是那么的直观。这里发一个逍遥大哥的解决方案出来。大家做个比较,用于理解环视
^(?!([^a-z]*[a-z]){2,})(?!/d+$)[/da-z]{6}$
这个问题的所有答案都是忽略大小写的前提的~