0

訪問者が近くの場所を検索するために使用する検索バーがあります。キーワードと距離の2つの入力ボックスで構成されています。

1つのボックスに簡略化したいのですが、訪問者が距離を入力できるようにします。「5km以内のコストコ」「デニーズ2マイル」などの用語を入力できます。

サーバー側では、その入力から距離を引き出したいと思います。エラーの余地がたくさんあることに気づきました。訪問者は、番号(4 km)の後にスペースを入れるか、全文(4 km)を使用するか、またはその他の問題をいくつでも気にすることができます。

訪問者が(n)kmまたは(n)miを入力できるようにする場合、データを個別の変数に解析するための良い方法は何ですか?

訪問者が「中国のインド料理店5mi」に入ったとしましょう。私はそれを次のように分割したいと思います:

string keywords = "Chinese Indian Korean restaurants";
string distance = 5; //(notice no mi, or km)

ある種の正規表現が必要になると思いますが、私の正規表現のスキルは非常に不足しています。前もって感謝します!

4

1 に答える 1

1

はい、この場合、正規表現はあなたの友達です。距離を一致させ、入力テキストから削除することに焦点を当てます。残っているのはキーワードです。

Regex distRex = new Regex("(?<dist>\\d+)\\s*(?<unit>mi|km|ft)", RegexOptions.IgnoreCase);

次に、これを行うことができます:

Match m = distRex.Match(testInput);
if(m.Success)
{
    string keywords = distRex.Replace(testInput, string.Empty);

    // you may want to further sanitize the keywords by replacing occurances of common wors
    //   like "and", "at", "within", "in", "is" etc.

    string distanceUnits = m.Groups["unit"].Value;
    int distance = Int32.Parse(m.Groups["dist"].Value);    
}
于 2013-03-14T01:53:38.633 に答える