正则表达式正确实现
本文关键字:实现 正则表达式 | 更新日期: 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 是一个整数,表示字符串中的起始位置。