正则表达式正确实现

时间:2013-01-24 22:13:57

标签: c# sql regex

这应该很简单,但请耐心等待。我忽略了什么?我试图做的就是接受一个SQL查询的一部分,我想检查以确保它有整数作为其值。如果是,那么我允许它传递给SQL Server。我收到通知,告知我的Regex方法有无效的参数。提前感谢您了解我错误的地方。

 string valid2Regex = @"\d{4}"; // regex to check for 4 integers
 Regex rgx = new Regex(valid2Regex);
 string idCheck = id;

 if (rgx.Matches(idCheck, rgx))
        {
            parameters.Add(DataAccess.CreateParameter("@YEAR", SqlDbType.NVarChar, HttpContext.Request.QueryString.Get("Year")));
        } 

2 个答案:

答案 0 :(得分:2)

^\d{4}$

这会将其限制为仅4位数。否则,字符串中的任何4位数字都可以与您的数字一起使用。

另外,there is no instance overload which takes those 2 parameters改为使用IsMatch

if (rgx.IsMatch(idCheck))
{
    ...

答案 1 :(得分:0)

谈论语法,你可以用不同的方式使用Regex:

string match = rgx.Match(idCheck);

在这种情况下,你寻找表达式并期望一个结果,es:

expr:"\d{4}"   text:"asdfas1234asdfasd"  -> "1234"
expr:"\d{4}"   text:"1234"               -> "1234"
expr:"^\d{4}$" text:"asdfas1234asdfasd"  -> null
expr:"^\d{4}$" text:"1234"               -> "1234"

如果您只想检查字符串是否匹配,可以使用:

bool found = rgx.IsMatch(idCheck);

的作用如下:

expr:"\d{4}"   text:"asdfas1234asdfasd"  -> true
expr:"\d{4}"   text:"1234"               -> true
expr:"^\d{4}$" text:"asdfas1234asdfasd"  -> false
expr:"^\d{4}$" text:"1234"               -> true

使用代码中的方法(Matches)查找多个实例并返回MatchCollection:

MatchCollection result = rgx.Matches(idCheck, 0);

你的错误可能与第二个参数有关,根据MSDN是一个整数,表示字符串中的起始位置。