Потеря начальных 0 при преобразовании строки в массив

#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.html

3. @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]);
}