检测用户输入是否包含JavaScript中的禁用字符

时间:2011-07-04 18:23:29

标签: javascript

我有一个文本框,点击提交按钮后将在JavaScript中验证。

只允许使用字符0-9和a-f和A-F.

所以g-z和G-Z以及其他字符如标点符号或不允许。

我到目前为止的代码是:

function validate_form ( )
{
    valid = true;

    if ( document.form.input.value == [a-zA-Z_,.:\|] )
    {
        alert ( "You can only enter either 0-9 or A-F. Please try again." );
        valid = false;
    }

    return valid;
}

这似乎不起作用。

我是JavaScript的新手,所以任何人都可以给我一个关于我哪里出错的提示吗?

4 个答案:

答案 0 :(得分:3)

我们实际上可以清理这些代码。没有必要跟踪valid,因为test()将为我们提供我们正在寻找的truefalse值。在您的情况下,保持可接受字符的白名单而不是黑名单也更容易。也就是说,我们知道我们想要的每个字符,但不能指定我们想要的每个字符。

function validate_form() {
  return /^[a-fA-F0-9]+$/.test(document.form.input.value);
}

请注意,您也可以使用它进行预检:

document.form.input.onkeyup = function() {
  if (!validate_form()) {
    alert("You can only enter either 0-9 or A-F. Please try again.");
  }
};

答案 1 :(得分:2)

语法为/^[a-zA-Z_,.:\|]+$/.test(document.form.input.value)。请注意^$:如果没有它们,即使对于只包含至少一个允许字符的字符串,测试也会通过。

答案 2 :(得分:0)

验证的最佳方法是不让用户输入错误的字符。使用此代码(这是jQuery版本,但您也可以将其轻松转换为JavaScript):

 $('#inputFiledId').keyup(function(e){
     // checking the e.keyCode here, if it's not acceptable, the return false (which prevents the character from being entered into the input box), otherwise do nothing here.
 });

这称为预检。无论你在客户端做什么,都要考虑到你在服务器上也要检查值(有服务器端验证),因为周围有多个hacks,如form-spoofing

答案 3 :(得分:0)

你可以做这样的事情

$('input').keyup(function(){
    var charac = /[g-zG-Z;:,.|_]/;
    var result = charac.test($(this).val());
    if(result == true){
        alert('You can only enter either 0-9 or A-F. Please try again.');
    }
})

http://jsfiddle.net/jasongennaro/GTQPv/1/