动态正则表达式用C#中的双反斜杠替换单反斜杠

时间:2016-10-21 04:35:20

标签: c# regex replace

在我的代码中,我保存正则表达式以验证英国移动电话号码,即" ^(+ 44 \ s?7 \ d {3} |(?07 \ d {3})?)\ s ?\ d {3} \ S \ d {3} $&#34?;进入Sql server数据库。

在检索表达式以验证手机号码时," \"将被替换为" \",这给出了一个严重的问题,因为在检查它时说移动电话号码无效,即使它有效。我试图用单个替换双斜杠,甚至用数据库中的一些特殊字符替换斜杠。

如果我静态地给出正则表达式,它对我来说很好:

C#代码:

     bool isPhoneNumber = Regex.IsMatch(sColumnValue, @"^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$");
     if (isPhoneNumber == true)
       {
          //Do something...              
       }
      else
       {
          //Do something...
       }

但是当我将Regex字符串存储在database.I已经替换了" \"在数据库中使用特殊字符" @#@"即。

    "^(@#@+44@#@s?7@#@d{3}|@#@(?07@#@d{3}@#@)?)@#@s?@#@d{3}@#@s?@#@d{3}$"

C#代码:

    string sRegxE = Context.Fields.Where(s => s.Name == sColumnName).Select(s => s.ExpressionValue).FirstOrDefault();
    string sExpression= sRegxE.Replace(@"@#@", @"\");
    if (isPhoneNumber == true)
       {
          //Do something...              
       }
      else
       {
          //Do something...
       }

这对我不起作用,我得到的是双斜杠而不是单斜杠,对正则表达式验证产生严重影响。

任何人都可以帮我阻止在C#中替换单个反斜杠,干杯!!

3 个答案:

答案 0 :(得分:1)

你可以简单地使用.Replace()函数,如下所示: -

string temp = "^(@#@+44@#@s?7@#@d{3}|@#@(?07@#@d{3}@#@)?)@#@s?@#@d{3}@#@s?@#@d{3}$";

temp = temp.Replace("^(@#@+44@#@s?7@#@d{3}|@#@(?07@#@d{3}@#@)?)@#@s?@#@d{3}@#@s?@#@d{3}$", "\");

temp = temp.Replace("^(@#@+44@#@s?7@#@d{3}|@#@(?07@#@d{3}@#@)?)@#@s?@#@d{3}@#@s?@#@d{3}$", "\\");

可以像以下一样使用它: -

bool isPhoneNumber = Regex.IsMatch(sColumnValue, temp);
     if (isPhoneNumber == true)
       {
          //Do something...              
       }
      else
       {
          //Do something...
       }

<强>编辑: -

您也可以使用 Regex.Unescape()

有关详细信息,请查看以下链接: -

许多正则表达式包含转义字符。有时你想要浏览这些角色以获得它们的原始表现。

https://www.dotnetperls.com/unescape

答案 1 :(得分:0)

我尝试了下面的代码并且它有效

string data = "+447712345678";
string pattern = @"^(@#@+44@#@s?7@#@d{3}|@#@(?07@#@d{3}@#@)?)@#@s?@#@d{3}@#@s?@#@d{3}$";
pattern = pattern.Replace(@"@#@", @"\");

if (Regex.IsMatch(data, pattern))
{
    //Do something...              
}
else
{
    //Do something...
}

答案 2 :(得分:0)

最后我解决了它。

我在这里做的不是使用&#34; Regex.IsMatch()&#34;直接,我创建了一个Regex对象并从Sql server数据库传递动态值,即^(+ 44 \ s?7 \ d {3} |(?07 \ d {3})?)\ s?\ d {3 } \ s?\ d {3} $,然后检查输入是否匹配。

代码:

      string sRegxE =dbContext.GetFields.Where(s => s.Name == sColumnName).Select(s => s.ExpressionValue).FirstOrDefault();
      Regex RgxM = new Regex("" + sRegxE + "");
      Match isPhoneNumber = RgxM.Match(sColumnValue);
       if (isPhoneNumber.Success)
         {
           //Do somthing...
         }

参考: Capture variable string in a regular expression?