2013-03-14 48 views
0

我有一個搜索欄訪問者用來搜索附近的地方。它由兩個輸入框組成:關鍵字和距離。如何從C#中的用戶文本輸入中拉出距離?

我想將其簡化爲一個框,但允許訪問者輸入一段距離。他們可以輸入像「5公里內的Costco」「Denny's 2mi」

在服務器端,我想拉遠距離輸入。我意識到有很多錯誤的餘地。訪問者可以在數字(4公里)之後放置一個空間,也可以使用全文(4公里),或者可能需要擔心的其他任何問題。

如果我想提供訪問者輸入(n)km或(n)mi的能力,將數據解析爲單獨變量的好方法是什麼?

假設一個訪客進入「中國印度韓國餐廳5mi」。我想把它分成:

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

我想像某種形式的正則表達式將是必需的,但我的正則表達式技能極度缺乏。提前致謝!

回答

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);  
} 
+0

謝謝!讓我快速檢查我的代碼。看起來正是我需要的。 – Chaddeus 2013-03-14 02:01:02

+1

@Chad - 我修復了一些錯別字,請使用更新的代碼.. – 2013-03-14 02:03:59

+0

工作幾乎正是我想要的,謝謝!一個問題......它似乎並沒有捕捉到「5米」,而是會捕捉到「5公里」。在這種情況下,看起來像''後面的第一個單元,不會被正則表達式拾取。 – Chaddeus 2013-03-14 02:17:44

相關問題