0

我有一个搜索栏,访问者用来搜索附近的地方。它由两个输入框组成:关键字和距离。

我想将它简化为一个盒子,但允许游客输入一段距离。他们可以输入诸如“5 公里内的 Costco”“Denny's 2mi”之类的术语。

在服务器端,我想从输入中拉出距离。我意识到有很大的错误空间。访问者可以在数字后面加一个空格(4 公里),也可以使用全文(4 公里),或者可能还有其他需要担心的问题。

如果我想为访问者提供输入 (n)km 或 (n)mi 的能力,那么将数据解析为单独变量的好方法是什么?

假设一个访客进入“Chinese Indian Korean Restaurants 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 回答