WP7的文本框验证

时间:2011-05-03 11:35:12

标签: silverlight validation windows-phone-7 textbox bing-maps

目前正在开发一个使用bing maps地理编码服务的Windows Phone应用程序。我有一个搜索框,用户可以在其中输入位置,然后将其发送到返回地理坐标的bing地图。

但是,我遇到了搜索框的问题。当我输入随机字母时,没有找到结果,我已经实现了代码,因此用户被告知没有找到目的地。问题是,如果用户决定写一些符号的原因,例如:& $%£“这会在bing map返回一些数据时崩溃应用程序。

我如何验证文本框条目,以便检查字符串中是否有符号,如果没有,则将其发送给服务?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:7)

最好的选择是防止用户输入无效字符。这可以通过在TextChanged事件中使用正则表达式来完成。您可以使用许可或限制模型。

请务必添加必要的使用声明:

using System.Text.RegularExpressions;

许可模型中,您允许除了您明确禁止的所有字符之外的所有字符:

private Regex rxForbidden = new Regex(@"[&$%£]", RegexOptions.IgnoreCase);
private void txtInput_TextChanged(object sender, TextChangedEventArgs e)
{
    txtInput.Text = rxForbidden.Replace(txtInput.Text, "");
    txtInput.SelectionStart = txtInput.Text.Length;
}

限制性模型中,您只允许使用特定字符:

private Regex rxForbidden = new Regex(@"[^0-9a-z]", RegexOptions.IgnoreCase);
private void txtInput_TextChanged(object sender, TextChangedEventArgs e)
{
    txtInput.Text = rxForbidden.Replace(txtInput.Text, "");
    txtInput.SelectionStart = txtInput.Text.Length;
}

通常,限制性模型将更容易维护(您不必返回并在发现时继续添加其他禁用符号),但这实际上取决于您的应用程序。在任何一种情况下,禁止符号的任何使用都将被完全忽略,就像用户没有按下该键一样。

作为旁注,您的textbox应将InputScope设置为Maps

答案 1 :(得分:1)

更好的方法可能是阻止用户输入这些无效字符。快速解决方法是在将字符串传递给地图控件之前简单地从字符串中删除这些无效字符,如下所示:

txtSearch.Text.Replace("&", "").Replace("$", "").Replace("%", "").Replace("£", "");

但从长远来看,直接在文本框控件上直接过滤掉无效字符会更容易。