`
bruce198
  • 浏览: 233297 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

正则表达式(必须包含字母.数字和特殊字符)

阅读更多
求一正则表达式,要求8个长度以上,且必须包含字母   数字和   特殊字符


看到这个问题,第一印象就是标准的正则表达式反向预搜索机制的运用
不过逻辑上还是有一些绕的.
分析一下,总结需求如下:
1.必须包含字母,即字符当中字母的个数>=1;
2.必须包含数学,即字符当中的数字个数>=1;
3.必须包含特殊字符,即字符当中的特殊字符个数>=1;

理论上的需求就是这个样子,不过
因为我们思考的都是利用正向思维,然而正则表达式引擎在这一方面支持性不是很好.
所以我们得改一种思考方式,试一下反向思考:
得出我们新的需求:
1.不能全是数学和特殊字符.
2.不能全是字符和特殊字符.
3.不能全是数字加字母.

这样写我们的思路就一下子清晰了.
现在思路大致已经清楚了.可以着手写表达式了
满足上面三个条件他们分别表示为:
(?<![!a-zA-Z])
(?<!\D)
(?<![a-zA-Z0-9])
组合起来就是
(?:?<!(?:[^a-zA-Z]|\D|[a-zA-Z0-9]))

关键问题解决了,再加上个数限制,整个功能完成

^.{8,}(?:?<!(?:[^a-zA-Z]|\D|[a-zA-Z0-9]))$
//或
^(?!(?:[^a-zA-Z]|\D|[a-zA-Z0-9])$).{8,}$


资料:

贪婪和懒惰的表达式(*,+)

位数限定符我们都可以用"贪婪"来形容,换句话说,正则表达式引擎将会尽可能地匹配更多的字符.
我们可以这样理解,正则表达式引擎遇到一个重复匹配时,只要表达式的特定成分允许,它将从左到右开始搜索.
例如,\d*3将进行数字的匹配,一直到没有更多的数字能够匹配为止.获得了尽可能多的数字后,引擎将试图匹配3.如果找不到,或不能立即找到(因为它已经匹配了所有的数字),就从上一次匹配中删除一个字符并再作一次尝试,这个过程会一直重复,直到匹配到3为止,然后接着进行.从这个例子中可以看出来,只要指定了数量,引擎就会首先尽可能多地获得字符,然后当无法匹配一个字符时,才吝惜地把字符一次次的释放掉,可以看到下图中的工作流程,它使用正则表达式\d*3,并试图在字符串"123456789fgh"中进行匹配.
首先他将匹配到所有的数字即123456789,然后从左边开始试图匹配到3,于是一位位从先前匹配的所有数字当中进行匹配,不能匹配3则释放掉,从右到左一直延续,直到匹配到3为止,所以最后的匹配虽说是123但,其中过程是很曲折的.计算机是个笨蛋^-^.



转自:http://www.cnblogs.com/symbol441/archive/2007/11/30/978515.html
分享到:
评论
5 楼 nechiy 2013-09-24  
maidongdong 写道
请教一下:
1.不能全是数学和特殊字符. 对应的正则表达式为:(?<![!a-zA-Z])
查过资料,仍然不知道?<!这个表示什么意思。[!a-zA-z]这个又表示什么意思。这中间感叹号!表示什么意思,<又表示什么意思。
望解答。


零宽断言,  第二个是伪代码。。。。。。。。。。。
4 楼 nechiy 2013-09-24  
bruce,你的解决方法让我眼前一亮,最起码思维方式值得眼前一亮,赞一枚。不过,那两个结果貌似都不可行  我补充俩 试试这个  也是最近遇到这个问题顺手写的:             ^(?![^a-zA-Z]+$)(?!\D+$)(?![a-zA-Z0-9]+$).{7,}$      总体上用了你的思维方式。 [color=darkblue][/color]
3 楼 yan0133 2013-03-22  
这个显然不对了,老兄你有没有试验过,随便写个纯字母的就通过了
2 楼 maidongdong 2009-09-03  
老兄,我验证了这个正则表达式,如果是“abc12345”,则也是可以的。显然和我们的要求不符合了,我们的要求是字母,数字,特殊字符,都必须至少出现一个。你看看是不是存在这个问题呢?
1 楼 maidongdong 2009-09-03  
请教一下:
1.不能全是数学和特殊字符. 对应的正则表达式为:(?<![!a-zA-Z])
查过资料,仍然不知道?<!这个表示什么意思。[!a-zA-z]这个又表示什么意思。这中间感叹号!表示什么意思,<又表示什么意思。
望解答。

相关推荐

    JS正则表达式必须包含数字、字母、特殊字符

    下面给大家介绍下JS正则表达式 必须包含数字、字母、特殊字符 js正则表达式要求: 1. 必须包含数字、英文字母、特殊符号且大于等于8位 2. 特殊符号包括: ~!@#$%^&* 正则表达式如下: /^(?=.*\d)(?=.*[a-zA-Z])(?=.*[~...

    java正则表达式判断密码是否包含大小写、数字、特殊字符

    随机产生字符串,字符串中的字符只能由特殊字符(&@#$%*),大写字母(A-Z),小写字母(a-z)以及数字(0-9)组成,且每种字符至少出现一次。这样产生字符串的方式可以应用到如下场景,比如,我们有一个应用就是添加用户完毕...

    正则表达式只可以输入只允许输入中文、数字、字母、下划线

    正则表达式只可以输入只允许输入中文、数字、字母、下划线

    常用验证正则表达式

    常用验证正则表达式,手机号验证,身份证号验证,邮箱验证,等等,

    正则表达式(中文).rar

     字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。 简单的转义字符  一些不便书写的字符,以及后边章节中特殊定义的符号,采用在前面加 "\" 的方法来书写。 转义字符(\Q...\...

    js复杂密码正则表达式 判断密码满足大写字母,小写字母,数字和特殊字符

    判断密码满足大写字母,小写字母,数字和特殊字符,其中任意三种组合,且长度在8到15之间或者判断密码满足大写字母,小写字母,数字和特殊字符,其中四种组合都需要包含

    正则表达式经典实例.pdf

    即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB...

    正则表达式

    上面的正则表达式依然匹配单个字符,这是因为还未在正则表达式中使用”通配符”,“通配符”是可以匹配多个字符的特殊字符。正则表达式中”通配符”远远超出了普通通配符的功能,它们被称为预定义字符:例如 1).:...

    IOS中用正则表达式判断输入的内容为8-16位且同时包含数字和字母

    主要介绍了IOS中用正则表达式判断输入的内容为8-16位且同时包含数字和字母,需要的朋友可以参考下

    正则表达式匹配各种特殊字符

    写个可以匹配一下各种特殊字符的正则表达式 ((?=[\x21-\x7e]+)[^A-Za-z0-9]) x21-\x7e]+)[^A-Za-z0-9]) 这个匹配所有键盘上可见的非字母和数字的符号 var patrn = /[`~!@#$%^&*()_\-+=&lt;&gt;?:"{}|,.\/;'\\[\]·~...

    正则表达式经典实例

    即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB...

    正则表达式字母数字特殊符号至少两种(文件后缀名丢失,下载后需自行修改为xxx.rar格式后解压使用)

    (文件后缀名丢失,下载后需自行修改为xxx.rar格式后解压使用)正则表达式包含字母数字特殊符号(不包含空格)至少两种

    php密码正式表达式

    正则表达式,反向思维(必须包含字母.数字和特殊字符)

    java 正则表达式

    JAVA正则表达式语法(转)正则表达式语法正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式示例表达式 ...

    正则表达式教程

    这包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。 &lt;br&gt;3.2 非打印字符 字符 含义 \cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之...

    最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等

    很多不太懂正则的朋友,在遇到需要用正则校验数据时,往往是在网上去找很久,结果找来的还是不很符合要求。所以我最近把开发中常用的一些正则表达式整理了一下,在这里分享一下。给自己留个底,也给朋友们做个参考。

    正则表达式30分钟入门教程

    因为使用了^和$,所以输入的整个字符串都要用来和\d{5,12}来匹配,也就是说整个输入必须是5到12个数字,因此如果输入的QQ号能匹配这个正则表达式的话,那就符合要求了。 和忽略大小写的选项类似,有些正则表达式处理...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    9. 不包括特殊字符的匹配 (字符串中不包括符号 数学次方号^ 单引号' 双引号" 分号; 逗号, 帽号: 数学减号- 右尖括号&gt; 左尖括号反斜杠\ 即空格,制表符,回车符等 10 匹配非负整数(正整数 + 0) 11 匹配不包括零的...

Global site tag (gtag.js) - Google Analytics