0

行の特定のフィールドのテキストがそのユーザーに対するパターン マッチング文字列と一致するかどうかに応じて、Web サイトのさまざまなユーザーがさまざまなデータベース行にアクセスできるようにするために、(管理者)ユーザーにパターン マッチング文字列を入力してもらいたいと考えています。 .

MySQL ステートメントに直接統合するのは簡単なので、Regex を選択しました。

正規表現を使用して、文字列が有効な正規表現であることを検証することからどこから始めればよいかわかりません。

同様の質問をいくつか検索しましたが、見つかりませんでした。Google はコミカルな答えを出しましたが、残念ながらあまり役に立ちませんでした。

人々はこれを実際に行っていますか、それとも避けていますか?

単純な正規表現で実行できますか、またはすべての有効な正規表現のセットを使用可能なサブセットに制限する必要がありますか?

4

3 に答える 3

2

javascriptで:

input = "hello**";

try{
        RegExp(input);
        // sumbit the regex
}catch(err){
        // regex is not valid
}
于 2012-12-18T15:37:33.507 に答える
2

正規表現の検証は、非常に複雑な作業です。正規表現はそれを行うことができません。

簡単なアプローチは、SQLステートメントを実行しようとしたときに発生するエラーをキャッチし、適切なエラーをユーザーに報告することです。

ここでは、「admin」が信頼できるユーザーであると想定しています。信頼できないユーザーに正規表現を入力する機能を与えることは非常に危険です。実行に非常に長い時間がかかるように構築された正規表現でシステムを攻撃するのは簡単だからです。そして、それはあなたがボビーテーブルの問題について心配し始める前です。

于 2012-12-18T15:22:46.420 に答える
-1

文字列に有効な正規表現が含まれていることを正規表現で検証することはできません。でも、妥協できるかもしれません。

正規表現で有効な文字のみが文字列で使用されていることだけを知りたい場合は、次の正規表現を使用できます。

^[\d\w \-\}\{\)\(\+\*\?\|\.\$\^\[\]\\]*$

用途によってはこれで十分かもしれません。

于 2012-12-19T08:39:18.803 に答える