#javascript #jquery
#javascript #jquery
Вопрос:
Я запрограммировал тест проверки, но if
условие выполняется, хотя оно и не должно.
Вот мой код:
function chk_val() {
var name = $('.info .name').val();
var birth = $('.info .birth').val();
var phone = $('.info .phone').val();
var eng_kor = /^[가-힣a-z] $/gi;
var num = /^[0-9] $/g;
if (name == '' || birth == '' || phone == '') {
alert('1');
} else if (!eng_kor.test(name)) {
alert('2');
} else if (!num.test(birth)) {
alert('3');
} else if (birth.length != 8) {
alert('4');
} else if (!num.test(phone)) {
alert('5');
} else if (phone.length != 10 amp;amp; phone.length != 11) {
alert('6');
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="info">
<input class="name" type="text" />
<input class="birth" type="text" maxlength="8" />
<input class="phone" type="text" maxlength="11" />
</div>
<button onclick="chk_val()">Check</button>
Я написал свои name
( wonki
), birth
( 19890222
) и phone
( 01012341234
) , затем нажал button(onclick="chk_val()")
. Он может передавать все if
операторы, но он попал в alert('3')
or alert('5')
.
Раньше я console.log
проверял значение num.test(birth)
and num.test(phone)
, и оно оказалось TRUE .
Я не знаю, почему я не могу пройти if(!num.test(birth))
и if(!num.test(phone))
.
Комментарии:
1. Когда я пробую фрагмент, я получаю
alert(4)
, потому что дата рождения не состоит из 8 цифр.2. Не используйте
g
модификатор при использованииtest()
.3. Не используйте else if, используйте if . Поскольку вы хотите проверить все. Если вы используете else if, он может предупреждать только один раз и прекращает проверку другого else if
4. о, извините, я изменил рождение
Ответ №1:
Как упоминалось в одном из комментариев, вам необходимо удалить глобальный флаг (/g ) из регулярного выражения.
Если регулярное выражение имеет установленный глобальный флаг, test() будет продвигать lastIndex регулярного выражения. Последующее использование test() запустит поиск по подстроке str, указанной lastIndex (exec() также улучшит свойство lastIndex). Стоит отметить, что lastIndex не будет сброшен при тестировании другой строки.
Ответ №2:
вам нужно изменить только регулярное выражение для числа
function chk_val() {
var name = $('.info .name').val();
var birth = $('.info .birth').val();
var phone = $('.info .phone').val();
var eng_kor = /^[가-힣a-z] $/gi;
var num = new RegExp('^\d $');
if (name == '' || birth == '' || phone == '') {
alert('1');
} else if (!eng_kor.test(name)) {
alert('2');
} else if (!num.test(birth)) {
alert('3');
} else if (birth.length != 8) {
alert('4');
} else if (!num.test(phone)) {
alert('5');
} else if (phone.length != 10 amp;amp; phone.length != 11) {
alert('6');
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="info">
<input class="name" type="text" />
<input class="birth" type="text" maxlength="8" />
<input class="phone" type="text" maxlength="11" />
</div>
<button onclick="chk_val()">Check</button>