黑马程序员技术交流社区

标题: 字符串的分割问题 [打印本页]

作者: 王超洋    时间: 2012-5-18 02:24
标题: 字符串的分割问题
要求用户输入身份证号,如果用户输入的有不是数字或不等于18位就给用户报错,这个程序该如何写?想了半天没想出来,求解。。
            string str1 = textBox1.Text;
            //str1.Substring(1,str1.Length);
            //for (int i = 0; i <= str1.Length;i++ )
            //{
            //    int i1;
            //    if(int.TryParse(str1,out i1)==false||i!=18)
            //    {
            //        MessageBox.Show("输入错误");
            //        return;
            //    }
            //}
str1是用户输入的字符串,这个是我写的,调试错误..

作者: 索学超    时间: 2012-5-18 08:46
使用正则表达式,很简单滴,如果需要不用正则表达式的,你说下,我也给你写下代码
这种方法要先加入声明命名空间:
using System.Text.RegularExpressions;
然后在方法中声明验证规则:
string s_reg = @"^\d{18}$";
声明要验证的字符串:
string s = textBox1.Text;
新建一个实例,并将验证规则以参数形式传入实例,
初始化类: Regex reg = new Regex( s_reg );
然后拿实例对要验证的字符串进行验证,返回结果为bool值:
if ( reg.IsMatch (s) )
{  
      MessageBox.Show( "It 's OK~");
  }
else
  {
     MessageBox.Show( "It 's Bad~");
}
作者: 郑玉赛    时间: 2012-5-18 09:39
Console.WriteLine("请输入18位有效身份证号");
            string s = Console.ReadLine();
            if (s.Length == 18)//可以把string类型看做一个char数组,这里就判断数组长度是否为18
            {
                    try
                    {
                        long j = Convert.ToInt64(s);//将输入的转换为长整形,失败就证明不是数字。
                        Console.WriteLine("{0}",j);
                    }
                    catch
                    {
                        Console.WriteLine("输入非法");
                    }
            }
            else
            {
                Console.WriteLine("身份证必须为18位数");
            }
            Console.ReadKey();
作者: 郑玉赛    时间: 2012-5-18 09:42
就想到这个方法,本来想将18位的一个一个字符强制转换的,但是发现不管输入的是不是数字,都转换成ascii码值了。
作者: 郑玉赛    时间: 2012-5-18 11:06
Console.WriteLine("请输入18位有效身份证号");
            string s = Console.ReadLine();
            if (s.Length == 18)//可以把string类型看做一个char数组,这里就判断数组长度是否为18
            {
                for (int i = 0; i < s.Length; i++)
                {
                    if (Char.IsDigit(s[i]))//判断s中每一个字符是否是数字
                    {
                        Console.WriteLine(s[i]);
                    }
                    else
                    {
                        Console.WriteLine("身份证必须由数字组成");
                        Console.ReadKey();
                    }
                    return;
                 }
            }
            else
            {
                Console.WriteLine("身份证必须为18位数");
            }
            Console.ReadKey();
这个是刚刚我问了别人回答之后,我再优化了一下。
作者: 常静华    时间: 2012-7-8 12:58
首先,你可以学习一下正则表达式!!代码如下

//引用命名空间
using System.Text.RegularExpressions;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入您18位或者15位的身份证:");
            string card = Console.ReadLine();
            string RegCard = @"^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$";
            Match match = Regex.Match(card, RegCard);
            if (match.Groups.Count <= 1)
            {
                Console.WriteLine("身份证输入有误!");
                Console.ReadKey();
            }
        }
    }
}

作者: 程艳伟    时间: 2012-7-8 17:29
直接正则啊,很简单的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2