Хотел бы сопоставить почтовый индекс в форме с соответствующим состоянием

#javascript

#javascript

Вопрос:

Я новичок в этих вещах. Я пытаюсь написать функцию, которая будет следить за тем, чтобы состояние, введенное пользователем в форме, соответствовало введенному им почтовому индексу. Например, почтовые индексы моего штата (Висконсин, WI) находятся между 53000 и 54999, поэтому я хотел бы убедиться, что если почтовый индекс, введенный в форме, находится между 53000 и 54999, введенным состоянием является WI, если пользователь не предупрежден.Мой html и код приведены ниже: он превращает строковый почтовый индекс в числа, но часть, которая должна сравнивать почтовый индекс и состояние, не работает. Как мне использовать метод test() для сравнения введенного состояния с реальным состоянием, соответствующим почтовому индексу? Спасибо. …………………………………………………………..

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> Matching state and zip code</title>

<script>
function validate(form) {
var returnValue = true;
var state = form.txtState.value;
var zip = form.txtZipcode.value;
var nzip = parseInt("form.txtZipcode.value");


if (state.length !=2) {
returnValue = false;
alert("The state field is empty. Please enter a state.");
frmRegister.txtState.focus();
}
if ((nzip >= 5300 amp;amp; nzip <=5499) amp;amp; (state !== WI)){
returnValue = false;
alert("The zip code does not match the state. Please check again");
frmRegister.txtState.focus();
}

if (zip.length !==5) {
returnValue = false;
alert("Your zip code should be n 5 digits long. Please enter a real US zip code");
frmRegister.txtZipcode.focus();
}

if (typeof nzip == "string") { 
alert('nzip is a string.') 
}
if (typeof nzip == "number") { 
alert('nzip is a number.') 
}

else
return returnValue;
}

</script>

</head>
<body>
<form name ="frmRegister" method="post"  action ="register.aspx"
onsubmit="return validate(this);">

<fieldset>
<legend>Register with us</legend>

<div> 
<label for ="txtState"> STATE:</label>
<input type="text" name="txtState" id ="txtState" size = "12"/>
</div>

<div> 
<label for ="txtZipcode"> ZIP CODE:</label>
<input type="text" name="txtZipcode" id ="txtZipcode" size = "12"/>
</div>

<div>
<input type="submit" value="Send"/>
</div>
</form>

</body>
</html>
  

Ответ №1:

Выполните эту проверку, сохранив диапазон значений почтового индекса в массиве JSON, например

 var states = {WI : {start : 5000,end:6000}, ST : {start: 6001,end: 7000}};
  

Теперь получите значение состояния, пусть оно будет «state_entered», теперь получите диапазон как

 var range = states.state_entered;
  

Теперь проверка диапазона стала проще

 if(zipcode_entered > range.start amp;amp; zipcode_entered < range.end){
   alert("That's correct!!!");
}
  

Таким образом, вы можете обрабатывать любое количество состояний без громоздкости кода.

Комментарии:

1. Спасибо. Я проверю и дам вам знать. Проверка достоверности почтового индекса как такового на самом деле не является моей самой большой проблемой: головная боль заключается в сравнении введенного почтового индекса с состоянием, чтобы убедиться, что они совпадают. Допустим, человек вводит 53704 (почтовый индекс Висконсина (WI)), но выбирает Мичиган (MI) в качестве штата, я хочу, чтобы функция:

2. Я проверю и дам вам знать. Проверка достоверности почтового индекса как такового на самом деле не является моей самой большой проблемой: головная боль заключается в сравнении введенного почтового индекса с состоянием, чтобы убедиться, что они совпадают. Допустим, человек вводит 53704 (почтовый индекс Висконсина (WI)), но выбирает Мичиган (MI) в качестве штата, я хочу, чтобы функция: получить почтовый индекс, проверить, находится ли он между 53000 и 54999, получить две буквы выбранного штата (в данном случае MI), сравнить егов известное состояние с почтовым индексом, и если оно совпадает, форма отправляется, если нет (как в этом случае), продолжается оповещение.