Microsoft®
Jan. 18th, 2005 04:09 pmНет, други мои, не удержусь. Вот вам проверка из предыдущего поста. Такую красоту нельзя прятать, любуйтесь все:
<script language='javascript'>
function validatePhone_contactPhoneNumber(oSrc){
// if number is greater than 10 digits,
// allow any digits, dashes and '+' at the beginning,
// must have at least one dash.
// this is what we are using for intl entry.
var regx = new RegExp(/^\d+$/);
var ndigitCount = 0;
var strValue = document.all.contactPhoneNumber.value;
var valueWithSpacesRemoved = '';
// make sure all characters are either digits, dashes, periods, or '+'
for (var i = 0; i < strValue.length; i++) {
if (regx.test(strValue.charAt(i))) {
ndigitCount++;
continue;
}
if (strValue.charAt(i) == '-') {
continue;
}
if (strValue.charAt(i) == ' ') {
continue;
}
if (strValue.charAt(i) == '.') {
continue;
}
return false;
}
//must have at least 4 digits
if(ndigitCount < 2){
return false;
}
return true;
}
</script>
Предлагаю конкурс — кто найдёт больше несоответствий кода и комментариев…
no subject
Date: 2005-01-18 06:41 am (UTC)Параметр функции
oSrcне используется, а используетсяdocument.all.contactPhoneNumber.valuevalueWithSpacesRemovedне используетсяЗнак "+" упоминается в комментах, но не в коде 8)
Но САМЫЙ перл, из-за чего, собственно, функция и не работает - это метод
test, который должен вызываться у СТРОКИ, а не у регэкспа! 8)))))//must have at least 4 digits
if(ndigitCount < 2){
на это уже можно даже не обращать внимания 8)
вообще, конечно, функция требует гораздо меньше кода, чем написано. но при этом ещё и будет работать! 8)
Боюсь представить, как написано ядро Windows! 8) (шутка - его писал другой, грамотный, программист из DEC)
no subject
Date: 2005-01-18 06:56 am (UTC)Кстати, перечислены далеко не все несоответствия :)
А вот ещё народная забава: понять, что же должна была делать эта функция…
no subject
Date: 2005-01-18 07:09 am (UTC)А вот ещё прикол этого куска кода: запись
/^\d+$/уже сама по себе является regexp'ом и инициирование этим объектом другого регэкспа ни к чему хорошему не приводит 8)))) (а именно приводит к нереализуемому выражению). Правильно было написатьx=new RegExp("^\\d+$");(на сколько вообще целесообразно использование regexp в этой функции). ИлиstrValue.charAt(i).test(/\d/)Что функция должна была делать по замыслу, примерно написано в комментарии в начале.
no subject
Date: 2005-01-18 07:17 am (UTC)'0' <= ch && ch <= '9', либо регэксп, но без цикла и совсем другой…А в комментарии написано следующее: если в номере больше десяти цифр, то… А если не больше? :)
no subject
Date: 2005-01-18 07:28 am (UTC)Это мне напоминает обсуждение одного проекта, когда я сильно возмущался, меня спросили, что там, на мой взгляд, можно улучшить. Меня этот вопрос просто поставил в тупик.. Там ничего нельзя было улучшить. Надо было всё целиком выкинуть и написать с нуля по-человечески.
no subject
Date: 2005-02-06 08:57 am (UTC)no subject
Date: 2005-02-06 12:48 pm (UTC)