输入的名称正则要求怎么写?

名称:只能包含小写字母,数字和短横线。必须以小写字母或者数字开头和结尾(32位),需对用户名里的大写字母已经下划线进行转换。

阅读 2.3k
3 个回答
let str = '1A11_C1',
    reg = /^[a-z0-9][a-z0-9\-]*[a-z0-9]$/g
str = str.replace('_','-').toLowerCase()
reg.test(str)

你的规则不完整吧,那个32位的意思是最长32位,还是必须32位?
如果最长32位,则为

/^[a-z0-9][a-z0-9\-]{0,30}[a-z0-9]$/

如果必须32位,则为

/^[a-z0-9][a-z0-9\-]{30}[a-z0-9]$/
function transName(str) {
    // 先校验
    if(!/^[\da-z][a-z\d\-_]{30}[\da-z]$/i.test(str)) {
        return false;
    }
    
    // 再转换
    return str.replace(/[A-Z_]/g, function(str) {
        if(str === '_') {
            return '-'
        }

        return str.toLowerCase();
    })
}

// 01234567890123456789ababc-a-b--z
transName('01234567890123456789aBabc_a_b-_Z');
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题