王小刚 发表于 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,}$从头开始判断只能是字符组成
新手理解。。欢迎指正 |