一个web程序,添加用户时需要验证用户名的格式。允许字母+数字+汉字三种任意组合,不允许特殊符号和其他格式。
另外,需要验证该用户名是否已经存在。目前我用了:MaskedEditExtender和MaskedEditValidator两个控件,但是发生一个问题MaskedEditExtender控件的Mask属性只能验证字母+自定义字符(自定义字符指的是什么?我用汉字通过了,难道是汉字)或者数字+自定义字符,没办法允许字母+数字+汉字的组合。求助我该怎么办。另外,验证数据是否存在应该用哪个控件?

解决方案 »

  1.   

    前台要做验证,那个验证控件应该可以写自己的验证逻辑吧。如果可以,你可以通过js来识别用户输入的是哪些字符,用字符的unicode吗很容易实现。检查数据是否存在需要回发数据到服务器,你需要发起一个ajax请求来完成这个操作。
    没什么机会用这个控件,仅供参考。
      

  2.   

    MaskedEditExtender是用来作屏蔽输入的控件(限定每个键入字符的格式),用户名的格式验证不需要用这个控件,因为字符数字、中文字符的顺序是任意的,用RegularExpressionValidator就可以了。验证用户名是否存在,可以用CustomValidator,需要写一个后台事件处理,从数据库中查询用户,判断用户名是否存在。前台代码:
    用户名:
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator runat="server" ErrorMessage="用户名必须输入" ControlToValidate="TextBox1" Display="Dynamic"/>
    <asp:RegularExpressionValidator runat="server" ControlToValidate="TextBox1" Display="Dynamic"
    ValidationExpression="[\w\u4e00-\u9fa5]+" ErrorMessage="请输入字母数字或中文"/>
    <asp:CustomValidator runat="server" Display="Dynamic" ControlToValidate="TextBox1"
    OnServerValidate="UserName_Validate" ErrorMessage="用户已存在" />后台代码:
    protected void UserName_Validate(object source, ServerValidateEventArgs e)
    {
    string username = e.Value; bool found = false;
    // 从数据库中查询用户,判断用户是否存在,例如
    // string sql = "SELECT * FROM Users WHERE UserNamee=@username";
    // SqlCommand cmd = new SqlCommand(sql, new SqlConnection("..."));
    // cmd.Parameters.Add(new SqlParameter("username", username));
    // found = cmd.ExecuteReader().HasRows; e.IsValid = !found; // 数据库里没有该用户名时,验证通过
    }
    一般检查用户名是否存在,不用验证控件也可以,直接在insert到数据库前判断,如果存在就在页面的提示信息控件(例如Label)中显示一个提示,直接返回就可以了。推荐用jquery的validation作验证,可以更方便写出简单的代码,楼主有兴趣可以参考下
    http://bassistance.de/jquery-plugins/jquery-plugin-validation/
    这是jquery.validation做的例子
    http://jquery.bassistance.de/validate/demo/eto/
      

  3.   

    使用正则验证^[\u4E00-\u9FA5a-zA-Z\d]+$
    <asp:RegularExpressionValidator runat="server" ControlToValidate="TextBox1" Display="Dynamic" ValidationExpression="^[\u4E00-\u9FA5a-zA-Z\d]+$
    " ErrorMessage="请输入字母数字或中文"/>
    判断存在使用ajax或ashx异步查询
    <script type="text/javascript"> 
        var xmlHttp; 
        function createXMLHttpRequest() 
        { 
            if(window.ActiveXObject) 
            { 
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
            } 
            else if(window.XMLHttpRequest) 
            { 
                xmlHttp = new XMLHttpRequest(); 
            } 
        } 
        function CheckUserName() 
        { 
          var us=document.getElementById("txtname").value; 
          if(us!="") 
          { 
            createXMLHttpRequest(); 
            var url= "RegistValidate.ashx?username="+escape(document.getElementById("txtname").value); 
            xmlHttp.open("GET",url,true); 
            xmlHttp.onreadystatechange=ShowResult; 
            xmlHttp.send(null); 
            } 
        } 
        function ShowResult() 
        { 
            if(xmlHttp.readyState==4) 
            { 
                if(xmlHttp.status==200) 
                { 
                    var s; 
                    s=xmlHttp.responseText; 
                      alert(s); 
                } 
            } 
        } 
    </script>
      

  4.   

    谢谢楼上的几位朋友,用户是否存在用ajax做判断我明白。我想知道的是AjaxControlToolKit中哪个控件是实现这种后台验证的。另外AjaxControlToolKit中有没有能实现格式验证的控件。
      

  5.   

    看来AjaxControlToolKit还是功能受限制啊。问下大家,大型项目中。大家都是用什么ajax控件的?手写js的牛人就不用回答了。