当字符串转换为数组时丢失前导0

时间:2011-10-06 23:29:08

标签: 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中写了一个regexp测试。

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

我得到null,这让我相信正在使用的正则表达式很好。在关于split方法的帮助文档中,我没有看到任何关于前导0的引用是一个问题。

**我已完全从我的代码中删除了正则表达式,同样的问题仍在发生。这意味着它不是问题来自的正则表达式。

3 个答案:

答案 0 :(得分:1)

这个怎么样?

/^\d+$/

您还可以指定5个这样的数字:

/^\d{5}$/

答案 1 :(得分:1)

我建议只获取邮政编码,而不是拆分非数字(特别是如果'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]);
}

答案 2 :(得分:1)

运行这个简化的案例:

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

按预期收益'00501'。您发布的代码中没有任何内容可以删除前导零。你可能想要多挖一点。

这有点像数字强制:Number('00501')产生501。仔细阅读docs for implicit conversions并检查代码中是否有任何弹出。