JS: RegExp (match)

LH
На сайте с 26.09.2013
Offline
89
680

День добрый!

Выводится ошибка: Uncaught TypeError: strToTest.match is not a function

Что я делаю не так?

<!DOCTYPE html>

<html>

<head>

<title>Использование повтора в регулярных выражениях</title>

</head>

<body>

<script type="text/javascript">

function bTestPostalCode( strToTest ) {

if ( strToTest == null || strToTest.length == 0 ) { return false; }

return( strToTest.match( /^\d{5}(-\d{4})?$/ ) != null );

}

</script>

<input type="text" name="Text2" id="anStr">

<input type="button" name="Button" value="Test"

onclick="alert( bTestPostalCode( document.getElementById('anStr') ) )">

</body>

</html>

MK
На сайте с 18.08.2005
Offline
126
#1

Видимо document.getElementById('anStr') , который передается аргументом strToTest в функцию не строка.

Попробуйте document.getElementById('anStr').value , может получится ☝

нет
LH
На сайте с 26.09.2013
Offline
89
#2
Marat_Kh:
Видимо document.getElementById('anStr') , который передается аргументом strToTest в функцию не строка.
Попробуйте document.getElementById('anStr').value , может получится ☝

Спасибо за ответ, но не помогло )

MK
На сайте с 18.08.2005
Offline
126
#3
Спасибо за ответ, но не помогло )

Не верю (с) д.б. алерт тру/нетру в зависимости от ввода :)

ТайпЕррора уже не будет, ибо document.getElementById('anStr').value это стринг. Если, конечно элемент с ид anStr существует.

LH
На сайте с 26.09.2013
Offline
89
#4
Marat_Kh:
Не верю (с) д.б. алерт тру/нетру в зависимости от ввода :)

ТайпЕррора уже не будет, ибо document.getElementById('anStr').value это стринг. Если, конечно элемент с ид anStr существует.

Ну я не вру ))

Функция 'когда ввожу' постоянно возвращает false, хотя по шаблону первые 5 символов это числа )) /^\d{5}(-\d{4})?$/

p.s Кстати вы говорите что не строка, а в шаблоне проверяется на число )) зачем приводить к строке? :D

MK
На сайте с 18.08.2005
Offline
126
#5

Речь шла об ошибке тайпЕррор, теперь ее нет.

зачем приводить к строке?

Никуда ничего не приводится. В изначальном варианте была попытка сравнить с регулярным выражением document.getElementById('anStr') , который есть метод объекта документ со всеми свойствами и методами элемента "анСтр". На что было получено ругательство "TypeError: strToTest.match is not a function". document.getElementById('anStr').value же возвращает строку (или андефинед если анСтр не элемент формы), которую вполне корректно сравнивать с регулярным выражением. Суда по регулярке, тру должно сказать если или ровно 5 цифр в анализируемой строке или строго 5 цифр тире и еще 4 цифры. В любом другом случае нетру. На мой замыленый к текущему часу глаз, именно так должно и быть.

VHS
На сайте с 28.09.2007
Offline
142
VHS
#6

вбей 45454-7545 или 45454 и посмотри на регулярку

ну и document.getElementById('anStr').value, конечно же

MK
На сайте с 18.08.2005
Offline
126
#7

А вообще, typeof здорово помогает свести такого рода ошибки к 0. Если, как то так сделать

function bTestPostalCode( strToTest ) {

return typeof strToTest == 'string' ?
( strToTest.match( /^\d{5}(-\d{4})?$/ ) ? true : false )
:
0;
}

то получим 0, если не строка и тру/нетру в зависимости от результата теста.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий