0

これは簡単なはずですが、ここで我慢してください。私が見落としているのは何ですか?私がしようとしているのは、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")));
        } 
4

2 に答える 2

2
^\d{4}$

これにより、わずか 4 桁に制限されます。それ以外の場合、文字列内の 4 桁の数字はすべてあなたのもので機能します。

また、これら 2 つのパラメーターを受け取るインスタンス オーバーロードはなく、代わりにIsMatchを使用します。

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

構文について言えば、さまざまな方法で正規表現を使用できます。

string match = rgx.Match(idCheck);

この場合、expression を探して、単一の結果を期待します。

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によると、おそらくエラーは2番目のパラメーターに関するものであり、整数であり、文字列の開始位置を表します。

于 2013-01-24T22:52:24.447 に答える