在我的代码中,我保存正则表达式以验证英国移动电话号码,即" ^(+ 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#中替换单个反斜杠,干杯!!
答案 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()
有关详细信息,请查看以下链接: -
许多正则表达式包含转义字符。有时你想要浏览这些角色以获得它们的原始表现。
答案 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...
}