#actionscript-3 #flash-builder
#actionscript-3 #flash-builder
Вопрос:
У меня есть элемент управления TextInput, который отправляет значение .txt в коллекцию массивов. Коллекция массивов представляет собой набор почтовых индексов США, поэтому я использую регулярное выражение, чтобы гарантировать, что я получаю только цифры из TextInput.
private function addSingle(stringLoader:ArrayCollection):ArrayCollection {
arrayString = (txtSingle.text) '';
var re:RegExp = /D/;
var newArray:Array = arrayString.split(re);
Почтовые индексы США начинаются с 00501. Следуя отладчику, после отправки zip-файла переменная ‘arrayString’ равна 00501. Но как только ‘newArray’ присваивается значение vaule, оно удаляет первые два 0 и оставляет мне 501. Это мое регулярное выражение делает что-то, чего я не ожидаю? Может ли это быть массив, изменяющий значение? Я написал тест регулярных выражений на javascript.
<script type="text/javascript">
var str="00501";
var patt1=/D/;
document.write(str.match(patt1));
</script>
и я получаю null, что наводит меня на мысль, что регулярное выражение, которое я использую, в порядке. В справочных документах по методу разделения я не вижу никаких ссылок на то, что начальные 0 являются проблемой.
** Я полностью удалил регулярное выражение из своего кода, и та же проблема все еще возникает. Это означает, что проблема возникает не из регулярного выражения.
Комментарии:
1. Что такое
arrayString
иtxtSingle
?2. FailedDev правильно, используйте
d
вместоD
. D означает совпадение со всем, что не является цифрой. Смотрите Раздел «Отрицаемые классы сокращенных символов» на этой странице: regular-expressions.info/charclass.html3. @Shaz arrayString — это строковая переменная, которую я использую для хранения входных данных, а textSingle — идентификатор текстового ввода.
4. @Sly_cardianl Я сопоставляю все, что не является цифрой, и удаляю его из строки с помощью метода разделения.
Ответ №1:
Запуск этого упрощенного случая:
var arrayString:String = '00501';
var re:RegExp = /D/;
var newArray:Array = arrayString.split(re);
trace(newArray);
Результаты '00501'
, как и ожидалось. В опубликованном вами коде нет ничего, что могло бы удалить начальные нули. Возможно, вам захочется еще немного покопаться.
Это подозрительно похоже на принуждение к числу: Number('00501')
выходы 501
. Прочитайте документы о неявных преобразованиях и проверьте, появляются ли они в вашем коде.
Комментарии:
1. Так что да, код, который я опубликовал, был в порядке. Этот массив передается в другой класс, и именно там происходит преобразование. Документы, которые вы рекомендовали, помогли мне найти, где происходило принуждение.
Ответ №2:
Как насчет этого?
/^d $/
Вы также можете указать ровно 5 чисел следующим образом :
/^d{5}$/
Ответ №3:
Я рекомендую просто получать почтовые индексы вместо разделения на нецифровые (особенно если ‘arrayString’ может иметь несколько почтовых индексов):
var newArray:Array = [];
var pattern:RegExp = /(d )/g;
var zipObject:Object;
while ((zipObject = pattern.exec(arrayString)) != null)
{
newArray.push(zipObject[1]);
}
for (var i:int = 0; i < newArray.length; i )
{
trace("zip code " i " is: " newArray[i]);
}