Проверка текстового поля для WP7


В настоящее время разрабатывается приложение для Windows Phone, использующее сервис геокодирования Bing maps. У меня есть окно поиска, где пользователи могут ввести местоположение, а затем это отправляется в Bing maps, который возвращает геокоординат.

Я, однако, столкнулся с проблемой с полем поиска. Когда я ввожу случайные буквы, результаты не обнаруживаются, и я реализовал код, так что пользователь информируется,что нет никаких назначений. Проблема, однако, в том, что если по какой-либо причине пользователь решает написать некоторые символы, например: & $ % £ " это приводит к сбою приложения, когда Bing maps возвращает некоторые данные.

Как бы я проверил запись textbox, чтобы она проверяла, есть ли какие-либо символы в строке, а затем отправляла это в службу, если их нет?

Любая помощь очень ценится!

2 2

2 ответа:

Лучший вариант-запретить пользователю вводить недопустимые символы. Это можно сделать с помощью регулярных выражений в событии TextChanged. Вы можете выбрать либо разрешительную, либо ограничительную модель.

Обязательно добавьте необходимый оператор using:

using System.Text.RegularExpressions;

В модели permissive вы разрешаете все символы, кроме тех, которые вы специально запретили:

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.

Лучшим методом может быть предотвращение ввода пользователем этих недопустимых символов. Быстрым решением было бы просто удалить эти недопустимые символы из строки, прежде чем передавать ее в элемент управления map следующим образом:

txtSearch.Text.Replace("&", "").Replace("$", "").Replace("%", "").Replace("£", "");
Но в долгосрочной перспективе будет проще просто отфильтровать недопустимые символы непосредственно в элементе управления textbox.