当前位置:编程学习 > C#/ASP.NET >>

求判断一串字符是否包含非法的手机号码

字符串=“13800138000,1380013822,13800013800000,138921444,444”
字符串正常的格式为手机号码之间用逗号相隔,可能会有很多个,想求效率高的判断字符里面是否包含非手机号码的方法。
我现在用循环,一旦有10W个以上的手机号码,好像就很慢了。。。。。 --------------------编程问答--------------------  string phone = "13800138000,1380013822,13800013800000,138921444,444";
        string[] phones = phone.Split(',');
        foreach (string item in phones)
        {
            if (!IsHandset(item))
            {
                //alert("错误的手机号码!")
            }
        }
public  bool IsHandset(string str_handset)
    {
        return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^[1]+[3,5,8]+\d{9}");
    }
互相学习,说错勿怪! --------------------编程问答-------------------- 10W个以上的,可以先过滤掉非11位的数字
再作判断

  --------------------编程问答--------------------
引用 1 楼 schjm 的回复:
 string phone = "13800138000,1380013822,13800013800000,138921444,444";
        string[] phones = phone.Split(',');
        foreach (string item in phones)
        {
            if (!IsHandset(item))
            {
                //alert("错误的手机号码!")
            }
        }
public  bool IsHandset(string str_handset)
    {
        return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^[1]+[3,5,8]+\d{9}");
    }
互相学习,说错勿怪!


谢谢热心的兄弟,我现在就是这样的。。。
有更有效率一点的么。。。。。。 --------------------编程问答--------------------
引用 2 楼 q107770540 的回复:
10W个以上的,可以先过滤掉非11位的数字
再作判断

 


我现在只是需要判断字符串是否包含非法的手机号码。
就是说,用最快的速度,找出字符串里面包含 非11位的号码或者11位的号码但不是手机号码。。。
老大,有好的建议么? --------------------编程问答-------------------- 十万个- -
直接用正则啊
((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
如果你拿到了字符串
并且字符串不用做修改
正则是最快的
其他方法现在没想到
你试试
然后告诉我- - --------------------编程问答--------------------
引用 5 楼 jiaoshiyao 的回复:
十万个- -
直接用正则啊
((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
如果你拿到了字符串
并且字符串不用做修改
正则是最快的
其他方法现在没想到
你试试
然后告诉我- -


老大。。。
不行。。。
我用字符串 "13800138000"跟字符串"13800138000,11"测试 ,结果是一样的 。。。 --------------------编程问答-------------------- 第一步先要搞定分隔符
var posList = new List<int>();
for (var i = 0; i <= str.Length; i++)
    if (str[i] == ',')
        posList.Add(i);
--------------------编程问答--------------------
引用 7 楼 sp1234 的回复:
第一步先要搞定分隔符
var posList = new List<int>();
for (var i = 0; i <= str.Length; i++)
    if (str[i] == ',')
        posList.Add(i);



老大。。。
这个什么意思 ?
接着呢?? --------------------编程问答-------------------- 关注,,,观望中,,,帮顶,,,效率是个很有意思的东西 --------------------编程问答--------------------
引用 9 楼 XMYXM 的回复:
关注,,,观望中,,,帮顶,,,效率是个很有意思的东西


刚写帮顶 。。。 --------------------编程问答-------------------- 高手呢。。。。。 --------------------编程问答--------------------
引用 8 楼 jt9079 的回复:
Quote: 引用 7 楼 sp1234 的回复:

第一步先要搞定分隔符
var posList = new List<int>();
for (var i = 0; i <= str.Length; i++)
    if (str[i] == ',')
        posList.Add(i);



老大。。。
这个什么意思 ?
接着呢??


接着就在posList取值去验证手机号码了。 --------------------编程问答--------------------
引用 12 楼 rjzou2006 的回复:
Quote: 引用 8 楼 jt9079 的回复:

Quote: 引用 7 楼 sp1234 的回复:

第一步先要搞定分隔符
var posList = new List<int>();
for (var i = 0; i <= str.Length; i++)
    if (str[i] == ',')
        posList.Add(i);



老大。。。
这个什么意思 ?
接着呢??


接着就在posList取值去验证手机号码了。

额之前就是这样 。。。
求更好的方法
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,