我有一个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的引用是一个问题。
**我已完全从我的代码中删除了正则表达式,同样的问题仍在发生。这意味着它不是问题来自的正则表达式。
答案 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并检查代码中是否有任何弹出。