帐号系统中,用户注册时,在向服务器发送校验请求之前,客户端会先进行用户填写内容的校验(主要靠正则表达式)。

由于校验注册的逻辑在多个项目中可以重用,这类通用的代码最好记录下来。


界面内容大致如下。现在以为校验前面四项为例:校验用户名、昵称、密码、确认密码。

客户端在每个控件失去焦点时,校验该控件输入内容时候合法。每一项的右侧空白处准备了一个Text文本控件,用于显示该项校验是否正确(校验失败时文字提示原因)。只有当所有输入信息都合法时,才向服务器发送注册请求。

定义几个bool变量用于记录每一项的校验结果,在初始化函数中为各个控件注册失去焦点时触发的事件函数。

private bool checkUserId = false;       // 校验用户名
private bool checkNickName = false;     // 校验昵称
private bool checkPwd = false;          // 校验密码
private bool checkRepwd = false;        // 校验确认密码 public void Initialize()
{
// 校验用户名
registerWindow.userId.LostFocus += UserId_LostFocus;
// 校验昵称
registerWindow.nickName.LostFocus += NickName_LostFocus;
// 校验密码
registerWindow.pwd.LostFocus += Pwd_LostFocus;
// 校验两次密码是否一致
registerWindow.repwd.LostFocus += Repwd_LostFocus;
}

校验用户名。

#region 校验用户名
// 校验用户名:a~z、A~Z、0~9,6~20个字符
private void UserId_LostFocus(object sender, RoutedEventArgs e)
{
checkUserId = false;
string userId = registerWindow.userId.Text.Trim();
if (string.IsNullOrEmpty(userId))
{
registerWindow.userIdCheck.Text = "用户名不能为空";
registerWindow.userIdCheck.Foreground = Brushes.Red;
return;
} // 判断长度:6~20个字符
if (userId.Length < || userId.Length > )
{
registerWindow.userIdCheck.Text = "长度6~20个字符";
registerWindow.userIdCheck.Foreground = Brushes.Red;
return;
} // 判断格式:a~z、A~Z、0~9
string pattern = @"^[0-9a-zA-Z]+$";
if (!Regex.IsMatch(userId, pattern))
{
registerWindow.userIdCheck.Text = "仅限数字和字母";
registerWindow.userIdCheck.Foreground = Brushes.Red;
return;
} /*
* 自定义的联网函数。联网判断用户名是否已存在。
* 参数:用户名,校验成功的回调,校验失败的回调
*/
appDataService.ConfirmUser(userId, ConfirmUserSuccess, ConfirmUserFail);
} // 当前输入的用户名可用
private void ConfirmUserSuccess(string msg)
{
registerWindow.userIdCheck.Text = msg;
registerWindow.userIdCheck.Foreground = Brushes.Green;
checkUserId = true;
} // 当前输入的用户名不可用,因为已存在
private void ConfirmUserFail(string msg)
{
registerWindow.userIdCheck.Text = msg;
registerWindow.userIdCheck.Foreground = Brushes.Red;
checkUserId = true;
}
#endregion

校验昵称

#region 校验昵称
// 校验昵称:只限制长度1~20个字符
private void NickName_LostFocus(object sender, RoutedEventArgs e)
{
string nickName = registerWindow.nickName.Text.Trim();
if (nickName.Length < || nickName.Length > )
{
registerWindow.checkNickName.Text = "长度1~20个字符";
registerWindow.checkNickName.Foreground = Brushes.Red;
checkNickName = false;
}
else
{
registerWindow.checkNickName.Text = "√";
registerWindow.checkNickName.Foreground = Brushes.Green;
checkNickName = true;
}
}
#endregion

校验密码。

#region 校验密码
// 校验密码:a~z、A~Z、0~9,6~20个字符
private void Pwd_LostFocus(object sender, RoutedEventArgs e)
{
checkPwd = false;
string pwd = registerWindow.pwd.Password;
if (string.IsNullOrEmpty(pwd))
{
registerWindow.checkPwd.Text = "密码不能为空";
registerWindow.checkPwd.Foreground = Brushes.Red;
return;
} // 判断长度:6~20个字符
if (pwd.Length < || pwd.Length > )
{
registerWindow.checkPwd.Text = "长度6~20个字符";
registerWindow.checkPwd.Foreground = Brushes.Red;
return;
} // 判断格式:a~z、A~Z、0~9
string pattern = @"^[0-9a-zA-Z]+$";
if (!Regex.IsMatch(pwd, pattern))
{
registerWindow.checkPwd.Text = "仅限数字和字母";
registerWindow.checkPwd.Foreground = Brushes.Red;
return;
} // 符合以上所有要求
registerWindow.checkPwd.Text = "√";
registerWindow.checkPwd.Foreground = Brushes.Green;
checkPwd = true;
}
#endregion

校验两次密码输入是否一致。

#region 校验两次密码是否一致
// 校验两次密码是否一致
private void Repwd_LostFocus(object sender, RoutedEventArgs e)
{
checkRepwd = false;
string pwd = registerWindow.pwd.Password;
string repwd = registerWindow.repwd.Password;
if (string.IsNullOrEmpty(repwd))
{
registerWindow.checkRepwd.Text = "";
return;
} if (!pwd.Equals(repwd))
{
registerWindow.checkRepwd.Text = "两次密码不一致";
registerWindow.checkRepwd.Foreground = Brushes.Red;
checkRepwd = false;
}
else
{
registerWindow.checkRepwd.Text = "√";
registerWindow.checkRepwd.Foreground = Brushes.Green;
checkRepwd = true;
} }
#endregion

点击【注册】按钮时,再次校验以上各项内容是否合法。

#region 点击注册按钮
private void RegisterCommand()
{
// 判断注册信息是否填写正确、完整
UserId_LostFocus(null, null);
NickName_LostFocus(null, null);
Pwd_LostFocus(null, null);
Repwd_LostFocus(null, null);   bool checkInfo = checkUserId && checkNickName && checkPwd && checkRepwd;
if (!checkInfo)
{
MessageBox.Show("请检查注册信息是否填写正确、完整!");
return;
} // 注册
string userId = registerWindow.userId.Text.Trim();
string nickName = registerWindow.nickName.Text.Trim();
string pwd = registerWindow.pwd.Password;
string userSex;
if (registerWindow.maleRB.IsChecked == true)
userSex = registerWindow.maleRB.Content.ToString();
else
userSex = registerWindow.femaleRB.Content.ToString();   /*
* 自定义的联网函数。联网判断用户名是否已存在。
* 参数:用户名,昵称,密码,性别,校验成功的回调,校验失败的回调
*/
appDataService.Register(userId, nickName, pwd, userSex,
RegisterSuccess, RegisterFail);
}
#endregion

最新文章

  1. IT人士怎样的休息方式才高效
  2. IOS 学习资料
  3. [新手学Java]反射学习笔记
  4. openresty 前端开发进阶一之http后端
  5. C#基础练习(使用委托窗体传值)
  6. bzoj 1069 [SCOI2007]最大土地面积(旋转卡壳)
  7. gridview动态添加列的问题
  8. svn问题(队列)
  9. Codeforces Round #346 (Div. 2) A Round-House
  10. channel_v3.json
  11. cross compile gdbserver
  12. 基于tomcat插件的maven多模块工程热部署(附插件源码)
  13. cpu的控制单元与语言中的控制逻辑有没有关系?
  14. linux find命令用法
  15. nvm管理node之后,安装npm包出现的问题
  16. Hibernate merge和update的区别
  17. Linux下ipv6配置系列
  18. KNN算法之图像处理二
  19. 洛谷P2097 资料分发1 题解
  20. java Integer包装类装箱的一个细节

热门文章

  1. 在一个gradle 的maven property 里添加多个URL
  2. 你永远学不会的设计--&gt;百度地图map api key 的设置
  3. MySQL 5.7.19 CentOS 7 安装
  4. Java 8 – StringJoiner example
  5. vs 2017打包安装包(印象深刻)
  6. Unity投影器细节整理
  7. 用“网建”平台发手机短信的C#代码
  8. 【Unity】6.8 Quaternion类(四元数)
  9. 深入理解Linux内核-内存寻址
  10. github pull request