JavaScript怎么在输入框禁止特殊字符好

试过几个方法。
第一个onkeyup="value=value.replace(/[^0-9]/g,'')" onpaste="value=value.replace(/[^0-9]/g,'')" oncontextmenu = "value=value.replace(/[^0-9]/g,'')"这个方法可以,但是按住不动光标点击框外没有焦点就可以输入。
方法2:
var keyup = function (obj) {
var reg = /^[a-\z\A-\Z0-9\u4E00-\u9FA5.-]+$/;

                //验证长度
                if (obj.value.length > 20) {
                    obj.value = '';
                }
                //验证类型
                if (!reg.test(obj.value)) {
                    obj.value = '';
                }
            }

结果和方法一一样!
方法三:
function ischin(str) {
var reg=/^[a-\z\A-\Z0-9.-\。\,*]{1,20}$/; /*定义验证表达式*/
return reg.test(str); /*进行验证*/
}
function fun1(){

if(!ischin(document.getElementById("username").value)){
    alert("用户名长度错误或使用特殊字符");
    document.getElementById("username").focus();
    return false;  
}

    return true;   
}

这个方法好,但是加入id在浏览器审查元素中删掉标签这个id,就失效了!防不住。
请问有什么好的解决方法吗?小白求教

无法展开全部问题!!!