0

ユーザーのために特定の正規表現の入力を簡素化しようとしています。正規表現の簡単な例は次のとおりです。

\b(C|C\+\+|Java)\b

<input type="text">生の文字列をフィールドに入力することで、正規表現の最後に別のブランチを追加するオプションをユーザーに提供しています。ブランチは文字どおりに解釈されるため、エスケープする必要があります。これを行うためにhttps://stackoverflow.com/a/2593661/785663を使用しましRegExp.quoteた。次に、完全な正規表現をデータベースに保存します。

ここで、データベースから正規表現を取得して分割し、ブランチをユーザーに表示するときに、すべてのエスケープ文字を再度削除する必要があります。これには事前に作成された関数がありますか、それとも自分でロールする必要がありますか?

はい、これを検索する文字列のリストに置き換える必要があることはわかっています。しかし、これはより大きな (正規表現ベースの) 全体像の一部にすぎません。

4

1 に答える 1

0

最適な解決策は、設計を変更することです。エスケープされていない正規表現を保存し、実際に使用するときにのみエスケープします。そうすれば、常に前後に変換するという厄介なビジネスについて心配する必要がなくなります。

この正規表現を頻繁に使用し、常にエスケープしなければならないことによるオーバーヘッドが心配な場合は、エスケープされていないバージョンとエスケープされたバージョンの両方を保存してください。ユーザーが変更を加えるたびに両方を更新します。

ps ユーザーが入力した正規表現を許可すると、サイトが攻撃に対して脆弱になる可能性があります。(更新:ただし、この場合、リテラル文字列のみを許可しているため、問題になる可能性は低いです)

于 2013-02-12T09:10:34.253 に答える