Потеря ведущих 0 при преобразовании строки в массив - PullRequest
0 голосов
/ 07 октября 2011

У меня есть элемент управления textInput, который отправляет значение .txt в коллекцию массивов. Коллекция массивов - это коллекция почтовых индексов США, поэтому я использую регулярное выражение, чтобы убедиться, что я получаю только цифры из textInput.

private function addSingle(stringLoader:ArrayCollection):ArrayCollection {
  arrayString += (txtSingle.text) + '';
  var re:RegExp = /\D/;
  var newArray:Array = arrayString.split(re);

Почтовые индексы США начинаются с 00501. После отладчика после отправки почтового индекса переменная arrayString имеет значение 00501. Но как только 'newArray' присваивается vaule, он удаляет первые два 0 и оставляет мне 501 Это мое регулярное выражение делает что-то, чего я не ожидаю? Может ли это быть массив, изменяющий значение? Я написал тест регулярного выражения в javascript.

<script type="text/javascript">
  var str="00501"; 
  var patt1=/\D/;
  document.write(str.match(patt1));
</script>

и я получаю нулевое значение, и это заставляет меня поверить, что регулярное выражение, которое я использую, подходит В справочной документации по методу split я не вижу никакой ссылки на проблему с ведущими нулями.

** Я полностью удалил регулярное выражение из своего кода, и та же проблема все еще возникает. Это означает, что проблема не в регулярном выражении.

Ответы [ 3 ]

1 голос
/ 07 октября 2011

Я рекомендую просто получить почтовые индексы, а не разбивать их на нецифровые символы (особенно, если в '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]);
}
1 голос
/ 07 октября 2011

Запуск этого упрощенного случая:

var arrayString:String = '00501';
var re:RegExp = /\D/;
var newArray:Array = arrayString.split(re);
trace(newArray);

Доходность '00501', как и ожидалось. В опубликованном вами коде нет ничего, что могло бы лишить ведущие нули. Вы можете копать немного больше.

Это пахнет подозрительно, как приведение числа: Number('00501') приводит к 501. Прочитайте документы для неявных преобразований и проверьте, не появилось ли что-нибудь в вашем коде.

1 голос
/ 07 октября 2011

Как насчет этого?

/^\d+$/

Вы также можете указать ровно 5 цифр:

/^\d{5}$/
...