C#“喜欢”搜索类似于SQL查询“LIKE”

时间:2012-02-24 06:59:21

标签: c#

这是我的情景。我正在做一个电话号码注册组件,它会拒绝一些带有特定前缀的号码(例如“95973”或“95949”)。我已经将这些前缀存储在数据库中了。

我想知道的是,是否有任何C#方法可以用来匹配注册号和我想拒绝的前缀。

使用PSEUDO CODE更新

BEGIN
GET phone num FROM querystring
FOR EACH banned prefix IN DB
    CHECK if phone num BEGINS WITH banned prefix
        IF TRUE, RESPOND TO phone num WITH error message
        ELSE, REGISTER phone num
END EACH
END

4 个答案:

答案 0 :(得分:5)

您可以使用String.StartWith方法。

 string phone = "9182323243";
 string[] prefix = {"93","94","85"};

 if (prefix.Any(pre => phone.StartsWith(pre)))
     //Reject
 else
     //Accept

答案 1 :(得分:2)

最简单:

        var prefix = "95973";
        var number = "95973-123456";
        var reject = number.Contains(prefix);
        var reject2 = number.StartsWith(prefix);

答案 2 :(得分:2)

描述您正在做什么的快速而低效的方法是以下LINQ行:

// load all prefixes
IEnumerable<string> prefixes = GetPrefixes();

// does Any prefix exists such that "number" starts with it?
bool reject = prefixes.Any(p => number.StartsWith(p))

如果您知道前缀总是很长5,那么您可以使用非常有效的精确查找:

string number = "1234567889";

// get the prefix part
string prefix = number.Substring(0, 5);

// check if prefixes contains it
bool reject = prefixes.Contains(prefix);

在任何情况下,如果你不经常更新前缀并且它们不是很大的数量(如果它们长5个字符,它们不是一个巨大的数量:))我建议你从内存中的DB加载它们,在HashSet<string>中说,并使用后一种方法,它会快速消失。

答案 3 :(得分:0)

我已经有为PBX编写操作系统的经验。因此,在您的情况下,最好的方法是编写规则,如下所示: * - 任何数字的数字,可以是0 ? - 一个任意数字

示例:

规则:“23948 ??”,数字应从“23948”开始,并且应该包含2位数后

规则:“9 *”,所有数字,从数字9开始(在这种情况下,PBX必须等待用户输入,例如在每个输入的数字之后和下一个数字之前等待2秒。)

因此,在这种情况下,您必须使用Regex