Проблема с регулярным выражением, заменой и заглавными буквами при проверке JS

#javascript

#javascript

Вопрос:

Я пытаюсь проверить почтовый индекс Квебека перед отправкой формы. Предполагается, что следующая функция (onBlur) переводит буквы в верхний регистр и удаляет все пробелы. Все, что предшествует «else», работает нормально.

 function back2(that){
    if (that.value.length <=4) {
        that.value = that.getAttribute("default");
        that.setAttribute("class", "exemple");
    } else {
        if (that.getAttribute("id") == 'zip') {
            that.setAttribute("value", that.value.replace(/s/g, ""));
            that.setAttribute("value", that.value.toUpperCase());
        }
    }
}
  

Это часть кода проверки формы, запускаемого событием onSubmit:

     if (f.value != "^G//d//D//d//D//d$" || 
        f.value != "^H//d//D//d//D//d$" ||
        f.value != "^J//d//D//d//D//d$" ||
        f.value != "^K1//D//d//D//d$" ||
        f.length !=6 ) {
        alert("Veuillez mettre un code postal valide du Québec, merci.");
        return false;
    }
    return true;
}
  

и HTML-код:

 <td>Code Postal</td>
<td><input name="zip" type="text"
     id="zip" value="J0B4M1" size="35"
     class="exemple" onfocus="clean(this)"
     onblur="back2(this)" default="J0B4M1"></td>
  

В обеих частях кода JS есть проблемы, потому что ничего не происходит, когда я меняю поля, а почтовый индекс содержит пробелы и написан строчными буквами. Кроме того, я получаю предупреждение, даже если формат почтового индекса правильный. Помогите!

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

1. упс… косые черты при пересылке должны быть обратными

Ответ №1:

Вы не можете сопоставить регулярное выражение, подобное этому:

 f.value != "^G//d//D//d//D//d$"
  

Вам понадобится .match или .test . Мне нравится совпадать:

 f.value.match(...)
  

Я действительно не знаю, что это за регулярное выражение… Их много / и нет . Я в замешательстве!

PS
Это тот самый:http://regexlib.com/REDetails.aspx?regexp_id=570 Вам должен понравиться Guugle!

Если это тот, вы могли бы использовать это:

 if ( !f.value.match(/^[a-zA-Z]{1}[0-9]{1}[a-zA-Z]{1}(-| |){1}[0-9]{1}[a-zA-Z]{1}[0-9]{1}$/) ) { alert('Oy! That's not right!'); }
  

Хотя это не идеально (обратите внимание на бесполезность {1} )… Эй, если это сработает, верно!?

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

1. ~ Вы уверены, что {1} бесполезно?

2. ~ Спасибо за ссылку. Я модифицировал его код, и эта часть теперь работает. Спасибо!

3. Да. Определенно в этом случае. (Я думаю, всегда.) И все [0-9] может быть записано как d . И [a-zA-Z] как [a-z] , если вы добавите i флаг в (после последнего / ).