javascript - 求一套正则表达式?
巴扎黑
巴扎黑 2017-04-11 09:59:59
[JavaScript讨论组]

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

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

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

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

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

巴扎黑
巴扎黑

全部回复(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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号