0

这应该很简单,但请耐心等待。我忽略了什么?我要做的就是接受一个作为 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")));
        } 
4

2 回答 2

2
^\d{4}$

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

此外,没有采用这两个参数的实例重载,而是使用IsMatch

if (rgx.IsMatch(idCheck))
{
    ...
于 2013-01-24T22:15:26.667 回答
0

谈到语法,您可以通过不同的方式使用 Regex:

string match = rgx.Match(idCheck);

在这种情况下,您查找表达式并期望一个结果,例如:

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 ,它是一个整数,表示字符串中的起始位置。

于 2013-01-24T22:52:24.447 回答