我有一个搜索栏,访客用来搜索附近的地方。它由两个输入框组成:关键字和距离。
我希望将其简化为一个框,但允许访问者输入距离。他们可以输入“Costco in 5km”或“Denny's 2mi”等词。
在服务器端,我想拉出输入的距离。我意识到有很多错误的余地。访问者可以在号码(4公里)之后放置一个空格,或者可以使用全文(4公里),或者可能担心任何其他问题。
如果我想为访问者提供输入(n)km或(n)mi的能力,那么将数据解析为单独变量的好方法是什么?
假设访客进入“中国印度韩国餐馆5mi”。我想把它分成:
string keywords = "Chinese Indian Korean restaurants";
string distance = 5; //(notice no mi, or km)
我认为需要某种类型的正则表达式,但我的正则表达式技能非常缺乏。提前谢谢!
答案 0 :(得分: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);
}