Проверка текстового поля для WP7
В настоящее время разрабатывается приложение для Windows Phone, использующее сервис геокодирования Bing maps. У меня есть окно поиска, где пользователи могут ввести местоположение, а затем это отправляется в Bing maps, который возвращает геокоординат.
Я, однако, столкнулся с проблемой с полем поиска. Когда я ввожу случайные буквы, результаты не обнаруживаются, и я реализовал код, так что пользователь информируется,что нет никаких назначений. Проблема, однако, в том, что если по какой-либо причине пользователь решает написать некоторые символы, например: & $ % £ " это приводит к сбою приложения, когда Bing maps возвращает некоторые данные.
Как бы я проверил запись textbox, чтобы она проверяла, есть ли какие-либо символы в строке, а затем отправляла это в службу, если их нет?
Любая помощь очень ценится!
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 следующим образом:
Но в долгосрочной перспективе будет проще просто отфильтровать недопустимые символы непосредственно в элементе управления textbox.txtSearch.Text.Replace("&", "").Replace("$", "").Replace("%", "").Replace("£", "");