Подтвердите имя / номер в JavaScript - PullRequest
2 голосов
/ 15 января 2011

У меня есть одно поле ввода.Он может содержать либо имя, либо число.

Если на входе есть хотя бы одна буква, мы воспринимаем его как имя и его длина должна быть 11 или меньше.Поэтому допустимым вводом может быть Bob, 12Bob или Bob23.Пустые пробелы или другие символы не допускаются, поэтому Bob_1, Bob 23 будут недействительными.

Если вход содержит только цифры, мы обрабатываем его как число, если так, число должно начинаться с 00 и должно быть длиной 16 илиниже.

Вот мой код:

function validateName(){
        var name = $('#absender').val();
        var length = name.length;
        if(/^[a-zA-Z0-9]+$/.test(name)){
            if(length > 11){
                $('#absender').addClass('error');
                $('#bsenderInfo').addClass('error');
                disableSave();
                return false;
            }else{
                $('#absender').removeClass('error');
                $('#absenderInfo').removeClass('error');
                enableSave();
                return true;
            }
        }else if(/^[0-9]+$/.test(name)){
            if(name.substring(0,2) != "00"){
                $('#absender').addClass('error');
                $('#bsenderInfo').addClass('error');
                disableSave();
                return false;
            }
            if(length > 17){
                $('#absender').addClass('error');
                $('#bsenderInfo').addClass('error');
                disableSave();
                return false;
            }else{
                $('#absender').removeClass('error');
                $('#absenderInfo').removeClass('error');
                enableSave();
                return true;
            }
        }else{
            $('#absender').addClass('error');
                $('#bsenderInfo').addClass('error');
                disableSave();
                return false;
        }   
      }

Неважно, что вход, это дает мне ложь, если длина 12. Любые идеи?

Ответы [ 2 ]

3 голосов
/ 15 января 2011

Это из-за этой строки:

if(/^[a-zA-Z0-9]+$/.test(name)){

Каждая числовая строка хорошо соответствует этому регулярному выражению, поэтому оператор "else" никогда не будет выполнен.

Вы можете исправить это, провериврегистрационное имя пользователя перед проверкой регистра [a-zA-Z0-9].

2 голосов
/ 15 января 2011

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

if (/^(00[0-9]{1,14}|[a-z0-9]{,11})$/i.test(name)) { 
    // Success condition
    ...
} else {
    // Failure condition
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...