2009-07-20 3 views
1

У меня есть этот код:проверки, JavaScript

<!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», то сообщение оповещения должно показать только «#». Как это может быть сделано?

ответ

2

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

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; 
} 
+0

Это не работает в Internet Explorer ранее версии 8. Вы должны использовать val.charAt (а) или val.substr (а, 1) вместо вал [а]. – Guffa

0

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

1

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

В качестве альтернативы вы можете построить объект Regexp и использовать его lastMatch.

0

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

см "String.match (рисунок)" около 1/3 вниз этой страницы: http://evolt.org/regexp_in_javascript

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

ул затем содержит [ "о", "или", "ро"]

2

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

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; 
    } 
} 
Смежные вопросы