Проверка текстового поля для 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("£", "");