2009-07-20 75 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(a)或val.substr(一,1)替代VAL [A]。 – Guffa 2009-07-20 13:26:26

0

你可以在包含所有被禁止的符号(如你的alphaExp)的正则表达式上进行matchall,然后连接匹配。

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) 

STR包含[ “O”, “或”, “RO”]

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