黑马程序员技术交流社区

标题: 正则表达式的问题(来一高手帮忙解决下,已发9小时了) [打印本页]

作者: 王小刚    时间: 2012-8-18 14:03
标题: 正则表达式的问题(来一高手帮忙解决下,已发9小时了)
本帖最后由 王小刚 于 2012-8-18 23:55 编辑

今天的学javascript表单效验验的时候,想起了平时注册账号时的要求。
但是我不知道这个正则该怎么写。
要求是这样的。
必须是由英文和数字组成,且长度为8以上。
我是这样写的var pswreg = new RegExp(^([a-zA-Z]+\\d+)$);
但是这样就不符合8位以上了。
我就这样写var pswreg = new RegExp(^([a-zA-Z]+\\d+){8}$);
这样的话也有问题。就是英文和数学间隔的。
还是不符合要求。
  那个帮忙帮我写个正确的给我。并求讲解。
作者: 赵俊杰    时间: 2012-8-18 14:09
可以去看毕老师的JAVA基础视频啊,好像最后一节就是讲正则。{:soso__5047281095667575129_2:}
作者: 王小刚    时间: 2012-8-18 14:11
我看了,但是没有讲到这个。
作者: 王小刚    时间: 2012-8-18 15:17
怎么没人来解决呀
作者: 胡文凡    时间: 2012-8-18 16:58
改进一下就好了。
"^[a-zA-Z][a-zA-Z0-9]{7,}$"
字母打头,后面接7位以上的数字或字母。

作者: 王小刚    时间: 2012-8-18 23:52
还是没人能解决,楼上的这个方法,我也想到过,但是要求不是这样的。
  因为并没有要求数学一定是多少个。
    只要是英文开头,但又必须是数学和英语都有,且长度要大于8。
       唉  
   应该是可以实现的,有好几个网站注册就是这样要求的。不知道是怎么实现。
     高手在哪?
作者: 胡文凡    时间: 2012-8-19 07:44
王小刚 发表于 2012-8-18 23:52
还是没人能解决,楼上的这个方法,我也想到过,但是要求不是这样的。
  因为并没有要求数学一定是多少个。
...

解决问题的过程就是一个不断学习的过程,你看看这个有没有用,有点复杂
String regex = "^(?=.*\\d)(?=.*[a-zA-Z])[\\da-zA-Z]{8,}$";
首先(?=X) 的意思是通过零宽度的正则X
分步来讲:
(?=.*\\d)开始确定有数字\\d,因为宽度为0,所以下次还会从字符串开始进行匹配
(?=.*[a-zA-Z]) 接着确定有字母[a-zA-Z],还是宽度为0,下次从开始进行匹配
[\\da-zA-Z]{8,}$从头开始判断只能是字符组成
新手理解。。欢迎指正
作者: 王小刚    时间: 2012-8-19 09:47
本帖最后由 王小刚 于 2012-8-19 09:49 编辑
胡文凡 发表于 2012-8-19 07:44
解决问题的过程就是一个不断学习的过程,你看看这个有没有用,有点复杂
String regex = "^(?=.*\\d)(?=.* ...


有点道理,我要试试。实验下。但是最后一个正则不是变成字母出现8次以上了。。。
作者: 王小刚    时间: 2012-8-19 20:54
问题已经解决!
哈哈,我终于找到解决问题的方法了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2