Regex.Replace使用变量而不是静态值

时间:2014-01-11 18:14:52

标签: c# regex data-binding

我尝试将数据绑定标签值格式化为电话号码,并在前3个数字的前面加上括号。

如果我手动输入Regex的值进行格式化,则会正确显示。如果我使用变量,我将不得不随着查看的每条记录的数字而改变,该值不会被格式化。

例如:

string pattern = @"(\d{3})(\d{4})(\d{4})";
string replace = "($1) $2 $3";
Regex rgx = new Regex(pattern);
string result = rgx.Replace("11122223333", replace);
lblTelephone.Text = result;

将在lblTelephone中显示(111)2222 3333,但如果我用变量值替换输入字符串,则不会进行格式化。

//Strip any spaces from the number, orignal number is 11122 223333 in the database
string phone = lblTelephone.Text.Replace(" ", string.Empty);
string result = rgx.Replace(phone, replace);

任何想法都非常感激。

1 个答案:

答案 0 :(得分:0)

此代码工作正常,因此您的问题在其他地方 (我的意思是你不是在使用变量)。 可能phone的价值不是你想象的那样。

    static void Main(string[] args)
    {
        string phone = "11122223333";
        string pattern = @"(\d{3})(\d{4})(\d{4})";
        string replace = "($1) $2 $3";
        Regex rgx = new Regex(pattern);
        string result = rgx.Replace(phone, replace);
        Console.WriteLine(result); 
    }

编辑1:

你是说你第二次使用(111)2222 3333作为输入? 如果是这样,你的问题是111左右的括号的存在。 在移除空格时也将它们移除。

编辑2:

很可能在DB中你看到值11122 223333但实际上你有一些不可见的char(作为后缀或前缀)或类似的东西。检查DB中的字符串长度和确切的字符串值。