0

文字列を取り、SQL サーバーでフィールド名として有効にするために区切る必要があるかどうかを判断する正規表現を VB.NET で記述したいと考えています。

たとえば、myFieldは有効ですが (コンテキストの例: SELECT myField from myTable)、そうでmy fieldはなく、角かっこ ( ) で区切る必要がありますselect [my field] from myTable

正規表現は、次のいずれかを含む文字列と一致する必要があります。

  • 空白文字
  • 、、を除く特殊文字 (!"£$%^など)_@#
  • 数字で始まる文字列または@
  • その他のフィールド命名規則 (SQL 予約キーワードを含まず、別の関数がそれを処理します)

私の現在の正規表現パターンは です[^A-Za-z]+。これは、アルファベット以外の文字と一致するため、ほぼ機能しますが、やなどの名前と不必要に一致しmy_fieldますfield0

正規表現の回答が推奨されますが、他のアプローチも問題ありません

4

2 に答える 2

0

この正規表現はあなたの条件に一致します:

^([\d@]|.*[^\w@#$]).*$

...もっと!すべての無効な文字 (64K あります) を指定するのではなく、有効な文字の否定を使用します。

実際には、問題には次の 2 つのタイプしかありません。

  • 最初の文字
  • 残りの文字

空白は特別なチェックを必要としません - 何千もの無効な文字がある場合にのみ行われます。

無効なものと一致する正規表現が必要なため、2 つのタイプの問題は OR されます。

于 2013-09-16T11:56:52.270 に答える