以下列举些常用 javascript 校验规则

用户名

用户名的初衷一般是用户在应用中的唯一标志以及默认昵称,采用用户名不会明显地暴露用户在真实世界的个人隐私,同时因为用户名代表了用户在此应用中的唯一身份,应该易于记忆,而且能够体现出用户对自己身份的认同和特殊性(个性化)。
用户名允许的字符(包括种类和数量)太多会带来很多问题,也不利于管理,允许的字符太少不利于表达出用户的个性化

百度账号以前允许的字符就很宽泛,允许单个汉字,甚至允许emoji字符,这充分给了用户表达自己个性的自由,但在不同的设备/应用上可能会有不同的表现,同时有些地方需要对用户名模糊处理(比如隐藏中间几个字符),百度账号难以处理。
目前百度的用户名规则为

  • 不超过7个汉字或14个英文
  • 仅支持中英文、数字和下划线
  • 不能为纯数字

腾讯的QQ号是随机数字,十分利于管理,但是因为是随机生成并分发给用户的,对于用户而言没有逻辑上的联想记忆,容易被用户忘记。
淘宝用户名被称为会员名,微信用户名被称为微信号,这两者账号是处理的比较好的,一般都是允许大小写字母,汉字,数字和_-#@等比较温和的特殊字符。比较不同的是淘宝以前注册时直接填写的是用户名,没有昵称概念,最近才提示要用户设置昵称。而微信注册时填写的就是昵称,用户名是随机生成的类似于 wxid_oz2xxxxxxxxxxx 的字符串,用户自己可以修改一次,改成易于记忆的用户名。

当然现在很多账号弱化了用户名的概念,直接使用 电话号码/邮箱地址 作为用户名,例如美团(美团注册甚至不用https),我个人觉得这是及其不合理的。

  • 首先用户名也具有默认昵称的作用,会在应用的某些位置进行展示,甚至会被其它用户看到,采用电话号码/邮箱地址会暴露用户的个人隐私。
  • 其次,电话号码并不能用来标志用户的唯一身份。我们都知道用户可能会经常变换电话号码,有些电话号码本身具有价值,用户甚至将电话号码作为财产的一部分进行赠予,但应用的账号并不一定需要同时转移所有权,而且如果用户的电话号码长时间未使用是有可能被电信运营商再次放入号池并售卖给其它个人的。这时如果电话号码新的用户登陆了原用户的账号就造成了严重的隐私泄漏事件。
  • 最后,电话号码/邮箱地址是需要验证的,验证的操作其实需要用户主动去触发,但是在注册时,我们只能称之为游客,一个游客不应该有验证电话的权限(这正是短信轰炸的根源之一),发短信虽然成本很低,但不是没有成本,可能会有恶意游客利用这个功能。
  • 最最后,如果一个游客没有邮箱没有电话就不能注册为你的用户了吗?虽然大部分情况下,绑定电话/邮箱的用户会是优质用户(说明用户愿意告知你他的部分隐私来提升你的应用账号安全性),但强制用户绑定手机号码/邮箱地址这显然不合理。

密码

不同的网站通常有自己的密码规则
例如百度的密码规则如下:

  • 长度为8-14个字符
  • 支持数字大小写字母和标点符号
  • 不允许有空格
  • 必须有数字、大写字母、小写字母、标点符号中至少两种

实测

  • 汉字也是可以的,而且不受字符种类至少两种的限制
  • 对标点符号的容忍十分宽限,单引号双引号斜线反斜线都可以

邮箱

邮箱通常是 字母数字小数点下划线@域名

电话号码

分为移动电话和固定电话
移动电话类似固定前三位数字选择,总共11位数字
中国需要加上区号 +86 其它国家地区有不同区号

url地址

通常指http协议地址,以 http:// 或 https:// 开头,后跟域名,端口号(可选),路径,问号,url参数,hash

居民身份证

通常为18位数字,前六位代表地区,中间八位代表生日,后四位代表编号,最后一位可以为X

IPv4地址

四个 0-255 之间的数字,以 . 连接

国内常用账号注册地址

百度
淘宝
QQ
京东
美团
小米
当当
华为
新浪微博

常用的校验库

可参考:

https://github.com/any86/any-rule

https://github.com/validatorjs/validator.js