网上浏览帖子,看到这个标题,就很好奇的点了进去。看到内容,我内心是崩溃的,深表同情。
- 看图
- 看到上面的,相信改完bug的程序猿会变成下面这样:
- null的问题,让我想到下面的问题
不管前端还是后端检测用户名,通常只检测下面几点:
- 用户名非空
- 用户名长度不超过限制
- 用户名中不包含非法字符串
看到图1,我们应该还要限制用户名不能为下面几个类型(站在前端的角度):
- undefined
- nan
- null
下面就以策略者模式写一个检测用户名的方法:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>策略者模式</title>
</head>
<body>
<script>
var validate = (function(){
var message = {
'isNotAllow':'用户名格式不正确'
};
var validateFunction = {
isNotAllow: function(value){
//判断传来的是否是字符串
if(Object.prototype.toString.call(value).slice(8,-1)!='String'){
return true;
}
//3-10位的字母下划线和数字组成。不能以数字或下划线开头
var reg = new RegExp("^[a-zA-z][a-zA-Z0-9_]{2,9}$");
var errorArr = ['undefined','nan','null']
if( !reg.test(value) || errorArr.indexOf(value.trim().toLowerCase())!==-1 ){
return true;
}
return false;
}
};
return function(value,type){
if(validateFunction[type](value)){
return message[type];
}
return '用户名格式正确';
}
})();
console.log(validate("Null","isNotAllow"));
console.log(validate("","isNotAllow"));
console.log(validate("*&%w","isNotAllow"));
console.log(validate("yinxiaofei","isNotAllow"));
</script>
</body>
</html>
- 执行结果: