2

データテーブルを使用して表示されるテーブルがあり、各列の上に空のテキスト フォーム フィールドがあり、ユーザーがフィルター条件で入力できるようになっています。これはすべてのテキスト フィールドで正常に機能し、整数フィールドでも正常に機能します。たとえば、ユーザーが NULL または NOT NULL を入力した場合など、いくつかの用語の変換を行っています。たとえば、それを正規表現 ^$ または .

正規表現はテキスト文字列を検索することを目的としていることは知っていますが、これはデータテーブルが使用するものであるため、これを行っています。私が欲しいのは、ユーザーが「x to y」などの値を入力して、それを正規表現に変換できるようにすることです。これを行う関数が見つかりません。誰か知っている人は教えてください。

関数がまだ存在しないと仮定して、正の整数のみが検索されると仮定し、7 桁までとします。0~9,999,999まで検索可能です。また、これがトリガーされる唯一の方法は、キーワード to とスペース " to " を使用することです。

次のようなものを開始します。

function convertNumRangeRegex(s){

if(s.indexOf(" to ") != -1){
var range = s.split(" to ");
lowRange = Number(range[0]);
highRange = Number(range[1]);   

if(lowRange >= 0 && lowRange < 10 && highRange < 10){
        s = "^[" + lowRange + "-" + highRange + "]$";
}};


return s; 
};

これは 0 ~ 9 の数字で機能しますが、これを拡張するとかなり見苦しくなります。私はどんなアイデアにも賛成です。ありがとう。

4

2 に答える 2

5

正規表現を使用して数値が範囲内にあることを検証するのは難しい問題です。これらの正規表現は、指定された範囲内の数値と一致します。

\b[0-9]{1,7}\b        #   0-9999999
\b[1-9][0-9]{2,6}\b   # 100-9999999
\b([4-9][0-9]{4}|[1-9][0-9]{5,6})\b   # 40000-9999999

複雑な範囲があると手に負えなくなり始めます

\b(?:5(?:4(?:3(?:2[1-9]|[3-9][0-9])|[4-9][0-9]{2})|[5-9][0-9]{3})|[6-9][0-9]{4}|[1-9][0-9]{5}|[1-8][0-9]{6}|9(?:[0-7][0-9]{5}|8(?:[0-6][0-9]{4}|7(?:[0-5][0-9]{3}|6(?:[0-4][0-9]{2}|5(?:[0-3][0-9]|4[0-3]))))))\b # 54321-9876543

ここに画像の説明を入力

于 2013-07-11T22:50:41.470 に答える