正则表达式正确实现

本文关键字:实现 正则表达式 | 更新日期: 2023-09-27 17:56:00

这应该很简单,但请耐心等待。 我忽略了什么? 我要做的就是接受一个作为SQL查询一部分的值,我想检查以确保它的值是整数。 如果是,那么我允许它传递给SQL Server。 我收到通知,指出我的正则表达式方法具有无效参数。 提前感谢您阐明我犯错的地方。

 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")));
        } 

正则表达式正确实现

^'d{4}$

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

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

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

谈到语法,你可以用不同的方式使用正则表达式:

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);

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