javascript - 求一套正则表达式?
巴扎黑
巴扎黑 2017-04-11 09:59:59
0
4
231

1、 用户名可使用英文字母、数字、汉字和下划线的任意组合,其中字母不区分大小写;

2、 用户名长度在6到12个字符之间;

3、 用户名特殊字符仅支持下划线 — ,不支持其他特殊字符及空格符;

4、 用户昵称不能设置为连续相同的字母或数字及连续升降排列的字母或数字;

5、 建议以字母和数字组合,仅六位到八位的昵称不支持设为纯数字;

巴扎黑
巴扎黑

reply all(4)
黄舟
1、 用户名可使用英文字母、数字、汉字和下划线的任意组合,其中字母不区分大小写;
2、 用户名长度在6到12个字符之间;
3、 用户名特殊字符仅支持下划线 — ,不支持其他特殊字符及空格符;
^[\w\u4e00-\u9fa5]{6,12}$
4、 用户昵称不能设置为连续相同的字母或数字及连续升降排列的字母或数字;
^(?!([\w\u4e00-\u9fa5])\1+$) //不能设置为连续相同的字母或数字

连续升降排列的字母或数字,这个要求用正则很难写,另外写个函数比较方便。

5、 建议以字母和数字组合,仅六位到八位的昵称不支持设为纯数字;
^(?!\d{6,8}$) //仅六位到八位的昵称不支持设为纯数字

合并:

^(?!([\w\u4e00-\u9fa5])\1+$)(?!\d{6,8}$)[\w\u4e00-\u9fa5]{6,12}$

简化:

/^(?!(.)\1+$)(?!\d{6,8}$)[\w\u4e00-\u9fa5]{6,12}$/


连续升降排列的字母或数字

is_equal_diff = function(s){
    len = s.length
    if (len<2) return false
    arr = Array.prototype.map.call(s, function(x){return x.charCodeAt()})
    dif = arr[1] - arr[0]
    for(i=2; i<len; i++){
        if (arr[i]-arr[i-1] != dif)
            return false
    }
    return true
}
is_equal_diff('acegi')
//true
巴扎黑

连续升降排列的字母或数字,这个正则比较困难吧,写出来不得一大堆啊,有限状态机了都。
或许直接写个方法来的更爽快。

除此之外到可以都满足

var reg = /^(?![a-z]+$)(?!\d+$)[a-z|\d|\u4e00-\u9fa5|\_]{6,12}$/i;
var test = ['1234567', 'aaabbbcccAA', '123456aa!', '123456aaabbbc', '1234aA汉字_'];

test.forEach(v => console.log(v, reg.test(v)));
伊谢尔伦

我觉得这些要求不是一个或者一组正则表达式可以解决的,干嘛一定要用正则表达式呢,写个函数不行吗?

巴扎黑

could consider something behind this: http://www.passwordmeter.com/
chkPass method located in pwdmeter.js

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!