Валидация, JavaScript - PullRequest
       23

Валидация, JavaScript

1 голос
/ 20 июля 2009

У меня есть этот код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>sss</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />


<script type='text/javascript'>
function isAlphabet(obj){

    var alphaExp = /[^a-z0-9_-]+/;
    if(!obj.value.match(alphaExp)){
        return true;
    }
    else{
        alert('the bad symbols');
        obj.focus();
        return false;
    }
}
</script>

</head>
<body>

    <form action="/">
        <input type='text' id='letters' onblur="isAlphabet(this)"/>
    </form>

</body>
</html>

И я хочу показать Alert(), отображающий только те символы, для которых проверка не пройдена.

Например:

Если вход содержит такие символы, как «#abc», в предупреждающем сообщении должно отображаться только «#». Как это можно сделать?

Ответы [ 5 ]

2 голосов
/ 20 июля 2009

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

function isAlphabet(obj) {
   var alphaExp = /[a-z0-9_-]+/g;
   var illegal = obj.value.replace(alphaExp, '');
   if (illegal.length){
      alert('Input contains the characters '+illegal+' which are not allowed.');
      obj.focus();
      return false;
   } else {
      return true;
   }
}
2 голосов
/ 20 июля 2009

Вот простой способ сделать это ... но это не самый эффективный способ:

function isAlphabet(obj)
{
    var val = obj.value;
    var alphaExp = /[^a-z0-9_-]+/;

    var valid = true;
    var badchars = "";

    for( a = 0; a < val.length; a++ )
    {
        if(val[a].match(alphaExp))
        {
            badchars += "," + val[a];
            valid = false;
        }
    }

    if( !valid )
    {
        alert("The following characters are not allowed: " + badchars.substr(1));
        obj.focus();
    }

    return valid;
}
1 голос
/ 20 июля 2009

В этом случае вы сопоставляете символы, которые не попадают в указанные диапазоны. Поэтому вы можете поместить сопоставленный текст в обратную ссылку и использовать его.

Кроме того, вы можете создать объект Regexp и использовать его lastMatch свойство.

0 голосов
/ 20 июля 2009

если вы используете модификатор g, вы можете получить .match(), чтобы вернуть вам массив совпадений (в вашем случае недопустимые символы), тогда вы можете просто отобразить их.

см. "String.match (pattern)" примерно на 1/3 этой страницы: http://evolt.org/regexp_in_javascript

var str = "Watch out for the rock!".match(/r?or?/g)

str затем содержит ["o", "or", "ro"]

0 голосов
/ 20 июля 2009

Вы можете сопоставить все в регулярном выражении, которое содержит все запрещенные символы (например, ваш alphaExp), а затем объединить совпадения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...