这里我有一个javascript / html代码。我的代码应该从用户读取一个或多个zipcodes的字符串并返回第一个无效的zipcode。它应该忽略空格。用户只能使用邮政编码48103,48104,48105,48106,48197,48198。其他任何内容都应无效。我的代码大多数工作,除非用户放入多个空格来分隔zipcodes。例如,如果用户输入" 48103,空间,空间,空间,98324"我的程序应该返回98324,但它只返回空格。有人可以帮忙吗?谢谢
<html>
<head>
<title>Due 03/30</title>
<script>
function test()
{
var usr = prompt("Enter a string of zip codes separated by spaces: ");
var array = [];
array = usr.split(" ");
//alert (array);
var pattern = /(4810[3-6])|(4819[7-8])/;
var str;
var isBad = false;
var i;
for (i =0; i < array.length; i++)
{
str = array[i];
if (!str.match(pattern) && str != " ")
{
alert ("The zipcode " + str + " is not a valid zipcode!");
isBad = true;
break;
}
}
if (isBad === false)
alert("All zipcodes are valid");
}
</script>
</head>
<body>
<button onClick="test();">Test String</button>
</body>
</html>
答案 0 :(得分:2)
使用正则表达式替换拆分中的单个空格的多个空格:
array = usr.split(/ +/g);
(感谢@HBP的编辑。)
然后您可以替换此代码:
if (!str.match(pattern) && str != " ")
... with:
if (!str.match(pattern))
答案 1 :(得分:1)
你的循环:
for (i =0; i < array.length; i++)
{
str = array[i];
if (!str.match(pattern) && str != " ")
{
alert ("The zipcode " + str + " is not a valid zipcode!");
isBad = true;
break;
}
}
应该是:(str != ""
不是str != " "
)
for (i =0; i < array.length; i++)
{
str = array[i];
if (!str.match(pattern) && str != "") // No space
{
alert ("The zipcode " + str + " is not a valid zipcode!");
isBad = true;
break;
}
}
这是因为当您将字符串"JavaScript is Awesome!"
拆分为空格时,javascript会将其视为"JavaScript"+Space+"is"+Space+""+Space+"Awesome!"
。