Как проверить эту строку на отсутствие специальных символов в Javascript?

У меня есть такая динамическая строка, которая может выглядеть так:

"69.43.202.97"                 OR               "ngs.pradhi.com"

Я хочу проверить, что эта строка содержит только цифры, английский алфавит и "." . Я хочу проверить это перед интерфейсом, используя java-скрипт. Я думал об использовании регулярного выражения следующим образом:

function validatePath() {
    var path = document.getElementById('server_path').value;
    path.match([a-z][0-9])  //or something like this
}

Если путь недействителен, несмотря на отображение окна предупреждения, я просто хочу показать ошибку под текстовым полем, как только пользователь заполнит путь к серверу. Как я могу это сделать?

Моя полная функция javascript выглядит так:

function validatePath() {
    var path = document.getElementById('server_path').value;
    if (path.search(":") == -1){
        alert("Invalid server path");
    }
    else{
        var host_name = path.split(":")[0]
        if host_name.match("^[a-zA-Z0-9.]*$")) {}

    }

}


person pynovice    schedule 30.05.2013    source источник
comment
/[a-zA-Z0-9]/ здесь правильное обозначение.   -  person tadman    schedule 30.05.2013
comment
Вы хотите, чтобы host_name совпадало? Или вы хотите, чтобы path соответствовало :?   -  person Isaac    schedule 30.05.2013
comment
Я хочу, чтобы host_name совпадало.   -  person pynovice    schedule 30.05.2013
comment
@user2032220: Просто любопытно, что не так с моим ответом, чтобы не принять его ???   -  person gkalpak    schedule 30.05.2013
comment
Ничего плохого, но @dshu610 дал ответ раньше вас. Я +1 ваш ответ. Спасибо   -  person pynovice    schedule 30.05.2013
comment
@ user2032220: Дело не в представителях. Мне просто показалось странным принять мой ответ, а затем не принять его, поэтому я подумал, что попрошу удовлетворить свое любопытство :) Я редко отвечаю быстрее всех, так как стараюсь тщательно решить проблему, предоставить ссылки на соответствующие docs и подготовить короткую демонстрацию, чтобы проиллюстрировать мое предложенное решение (все это требует времени), но, в конце концов, я думаю, это вопрос стиля. В любом случае спасибо за голосование ;)   -  person gkalpak    schedule 30.05.2013


Ответы (4)


попробуй path.match("^[a-zA-Z0-9.]*$")

РЕДАКТИРОВАТЬ: var regex = new RegExp("^[a-zA-Z0-9.]*$"); if(regex.test(host_name)){}

person dshu610    schedule 30.05.2013
comment
Смотрите мой обновленный вопрос. Как бы я включил это в мою вышеприведенную функцию. - person pynovice; 30.05.2013

вы можете использовать /^[a-zA-Z0-9.]*$/.test(path), который вернет true или false

person go-oleg    schedule 30.05.2013

Чтобы отличаться, замените метод:

if(path.replace(/^[a-z\d.]*$/i,"")=="")
person Isaac    schedule 30.05.2013
comment
Обратите внимание, что подчеркивание (_) считается символом слова, а не тем, что хочет OP. В этом случае лучше использовать /[^a-z\d\.]/i. - person RobG; 30.05.2013
comment
Обновленный ответ, чтобы отличаться - person Isaac; 30.05.2013

Вы можете выполнить проверку (включая наличие порта) с помощью такого регулярного выражения:

^[a-zA-Z0-9\.]+:[0-9]+$

(Обратите внимание на + вместо * для учета пустого пути или порта (они не разрешены).)

Если вы используете HTML5, рассмотрите недавно введенные атрибуты «шаблон» и «обязательный», которые могут сэкономить вам некоторый код JS.

См. эту короткую демонстрацию для иллюстрации обоих методов.

Некоторые ссылки, которые могут оказаться полезными:

person gkalpak    schedule 30.05.2013