用js在前台捕捉对TextBox的keydown事件,如果不是数字,则不允许输入
后台用这个函数操作已经输入的字符串 ,返回值为指定格式
private string ConvertNum()
{
    string s=控件ID.Text.Trim();
    if(s.Lenth!=10)
    {
        Response.Write("<script>alert('号码长度错误!');</script>");//长度不为10,报错
         return;
    }
    return s.Insert(3,"-").Insert(7,"-");
}

解决方案 »

  1.   

    如果允许输入逗号“,”,同样用js捕捉keydown,不是“,”或者数字不让输入
    函数改为:private string ConvertNum()
    {
        string s=控件ID.Text.Trim().Replace(",","");    if(s.Lenth!=10)
        {
            Response.Write("<script>alert('号码长度错误!');</script>");//长度不为10,报错
             return;
        }
        return s.Insert(3,"-").Insert(7,"-");
    }
      

  2.   

    sry,刚才把字符串的Length全写成了Lenth
    这个是整体的函数,不需要页面的js判断
    直接将用户输入的文本做参数输入
    然后该函数进行判断,合法则返回处理后的号码
    不合法则提示错误
    private string ConvertNum(string s)
    {
        string s=s.Replace(",","");
        if(s.Lenth!=10)
        {
            Response.Write("<script>alert('号码长度错误!');</script>");//长度不为10,报错
             return;
        }
        System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();
        byte[] bytestr = ascii.GetBytes(s);
        foreach (byte c in bytestr)
        {
            if (c < 48 || c > 57)
            {
                Response.Write("<script>alert('输入不全为数字!');</script>");//长度不为10,报错
                return;
            }
        }
        return s.Insert(3,"-").Insert(7,"-");
    }
      

  3.   

            private string ConvertNum(string text)
            {
                text = text.Replace(",", "");            if (text.Length != 10)
                {
                    Response.Write("<script>alert('号码长度错误!');</script>");//长度不为10,报错
                    return "";
                }
                return int.Parse(text).ToString("000-000-0000");
            }
      

  4.   

    private string ConvertNum(string s)
    {
        string num="";
        char ch;
        System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();
        byte[] bytestr = ascii.GetBytes(s);
        for (int i = 0; i < bytestr.Length;i++ )
        {
            if (bytestr[i] >= 48 && bytestr[i] <= 57)
            {
                ch =(char) bytestr[i];
                num += ch;
            }
        }
        if (num.Length != 10)
            return "0";
        return num.Insert(3, "-").Insert(7, "-");
    }
    这个可以了,客户甚至可以输入字母  
    如果长度不为10 则返回一个"0"
      

  5.   

    function USAPhone(phone)
    {
        var phone=phone;
        var phoneWord;
        var list=new Array(phone.length);    
        var phoneList=new Array(11);
        if(phone.length>=10)
        {
            for(int i=0;i<phone.length;i++)
            { 
                list[i]=phone.charAt(i);
                if(match(list[i])==match(\d))
                {
                    phoneList[i]=list[i];
                }
            }
            for(int j=0;j<phoneList.length;j++)
            {
                if(phoneList[i]!="")
                {
                    phoneWord=phoneList[i];
                }
            }
            phoneWord=subString(phoneWord,3).concat(subString(phoneWord,3),"-")+phoneWord.sline(4,6))+"-"+phoneWord.sline(7,10);
            return phoneWord;
        }
    }
    这是我写的,里面有很多错误,大家给挑下错吧(要求必须是函数)因为好几个地方用到
      

  6.   

    不一定要在js里写
    这样通用性不是很好
    你单独写一个类
    类里写个静态方法要好很多
    在任意地方(只要引入了该类的命名空间)    
    你要得到的号码=类名.方法名(用户输入的文本);public static string ConvertNum(string s)
    {
        string num="";
        char ch;
        System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();
        byte[] bytestr = ascii.GetBytes(s);
        for (int i = 0; i < bytestr.Length;i++ )
        {
            if (bytestr[i] >= 48 && bytestr[i] <= 57)
            {
                ch =(char) bytestr[i];
                num += ch;
            }
        }
        if (num.Length != 10)
            return "0";
        return num.Insert(3, "-").Insert(7, "-");
    }
      

  7.   

    8楼你的方法很正确,
    System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();
    这个是什么意思?
    转为ASCII码值吗?