服务端实现注册“用户名”的验证,方法比较繁琐,请高手赐教简便的方法

影歌王朝 2012-06-15 10:04:49
设计一个注册页面,暂时才把“用户名”这一栏的服务端验证弄好,但是自我感觉方法比较繁琐,请教高手有没有更简单的方法,最好能够只用一个CustomValidator控件完成验证。

验证要求如下(用户名):
1、用户名不能为空
2、可用汉字、字母(大写和小写)、数字、“_”、“-”
3、用户名长度为4-20位字符(汉字算两个字符)
4、针对“用户名”这一栏的验证错误信息在同一个地方显示

最初设想只用一个CustomValidator控件完成所有验证,无奈能力有限,没能实现。现在的实现方法是:
1、一个CustomValidator控件(验证非法字符)
2、一个RequiredFieldValidator控件(验证非空)
3、自定义一个方法(获取文本框中字符的长度使汉字算两个字符)

具体代码如下:
<span>用户名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1" runat="server"
ControlToValidate="TextBox1" Display="None"
onservervalidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" Display="Dynamic">用户名不能为空</asp:RequiredFieldValidator>
<asp:Label ID="Label1" runat="server"></asp:Label>
<br />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="提交" />
</span>



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;

public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
Match match = Regex.Match(args.Value,"^[\u4e00-\u9fa5A-za-z0-9_-]+$");
args.IsValid = match.Success;

}
protected void Button1_Click(object sender, EventArgs e)
{
if (CustomValidator1.IsValid == false)
{
Label1.Text = "你输入了非法字符";
}

else if (getTextBoxLength(TextBox1.Text) >= 4 && getTextBoxLength(TextBox1.Text) <= 20)
{
Label1.Text = "通过验证";
}
else
{
Label1.Text = "只能输入4-20位字符";
}
}

//获取文本框字符串长度
//Textbox控件的Text是string类型,该类型是unicode编码,只需获取中文的unicode值范围
//然后对string逐个进行分析,如果在中文unicode值范围内就加2,否则就加1
//中国、日本和韩国的象形文字(总称CJK)占用了Unicode字符从0x3000到0x9FFF的代码
int getTextBoxLength(string textBoxStr)
{
int nlength = 0;
for (int i = 0; i < textBoxStr.Length; i++)
{
if (textBoxStr[0] >= 0x3000 && textBoxStr[i] <= 0x9FFF)
{
nlength += 2;
}
else
{
nlength++;
}
}
return nlength;
}
}


希望高手指出不足之处,并赐教更简便的服务端验证方法。
...全文
158 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ParanoidKing 2012-06-16
  • 打赏
  • 举报
回复
CustomValidator的Display改成Dynamic,加上ValidateEmptyText="True",就可以只用CustomValidator来验证了。后台这样写

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
string inputs = args.Value;
if (string.IsNullOrEmpty(inputs))
{
CustomValidator1.ErrorMessage = "用户名不能为空";
args.IsValid = false;
return;
}
else if (!Regex.Match(args.Value, "^[\u4e00-\u9fa5A-za-z0-9_-]+$").Success)
{
CustomValidator1.ErrorMessage = "你输入了非法字符";
args.IsValid = false;
return;
}
else if (!(getTextBoxLength(inputs) >= 4 && getTextBoxLength(inputs) <= 20))
{
CustomValidator1.ErrorMessage = "只能输入4-20位字符";
args.IsValid = false;
return;
}
else
{
args.IsValid = true;
return;
// 如果设置了IsValid=true就不能显示"通过验证"了。还是用Label吧
}
}

然后button的Click事件就可以不要了。
另外getTextBoxLength方法里面应应该是if (textBoxStr[i] >= 0x3000 && textBoxStr[i] <= 0x9FFF)
gsralex 2012-06-16
  • 打赏
  • 举报
回复
为什么要用到服务器验证,你这种的完全可以在客户端来写
tlerbao 2012-06-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
为什么要用到服务器验证,你这种的完全可以在客户端来写
[/Quote]

客户端的东西是可以破解的 兄弟~ 服务器端必须也要验证

双管齐下才是对的!
huijunliang 2012-06-15
  • 打赏
  • 举报
回复
jquery 插件

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧