Regexp替换输入字段中的符号

Regexp replace symbols in input field

本文关键字:符号 字段 替换 输入 Regexp      更新时间:2023-09-26

我有一个输入字段和一个带有regexp的代码,使它只能输入数字

$('input').keyup(function () { 
    this.value = this.value.replace(/[^0-9]/g,'');
}); 

但是,当有人试图编辑字段中间的符号时,光标会放在字段的末尾。这使得编辑变得困难,因为您必须删除要编辑的符号后面的所有符号。

一个简单的演示:

http://jsfiddle.net/NehmP/

有人能帮我修一下吗?

只有当新字符串与旧字符串不同时才应该进行替换:

$('input').keyup(function () { 
   var v = this.value.replace(/[^0-9]/g,'');
   if (v!=this.value) this.value = v;
}); 

这样,只要值是有效的,光标就不会被放在末尾。

演示

您应该尝试一些类型的输入屏蔽插件,例如,maskedInput。

$("input").mask("9999"); // People will only be able to type numbers of 4 chars long!
$("input").mask("9?999"); // People will only be able to type numbers from 1 to 4 chars long!

使用此代码,即使值无效,光标也不会放在单词的末尾。它是dystroy的解决方案和我在互联网上找到的代码的组合。我认为它仍然有很多缺陷,太长了,但也许它仍然可以帮助别人……非常感谢你们:)

function doGetCaretPosition (ctrl) {    
    var CaretPos = 0;
// IE Support
    if (document.selection) {   
        ctrl.focus ();
        var Sel = document.selection.createRange ();    
        Sel.moveStart ('character', -ctrl.value.length);    
        CaretPos = Sel.text.length;
    }
// Firefox support
    else if (ctrl.selectionStart || ctrl.selectionStart == '0'){
        CaretPos = ctrl.selectionStart;
    }
    return (CaretPos);  
}
function setCaretPosition(ctrl, pos){   
    if(ctrl.setSelectionRange){
        ctrl.focus();
        ctrl.setSelectionRange(pos,pos);
    }else if (ctrl.createTextRange) {
        var range = ctrl.createTextRange();
        range.collapse(true);
        range.moveEnd('character', pos);
        range.moveStart('character', pos);
        range.select();
    }
}
var remember;
$('input').keyup(function () { 
    remember = doGetCaretPosition(this);
    var v = this.value.replace(/[^0-9]/g,'');
    if (v!=this.value) {
        this.value = v; 
        setCaretPosition(this,remember - 1)
    };      
})

和jsfiddle

你不应该给别人添麻烦。你想做的事情超出了javascript的范围,应该由浏览器/操作系统处理。

如果你向某人展示一个文本框,他们希望能够在里面输入任何东西(除了在某些情况下,例如在手机上,可以定义一个特定的键盘)。

用上下文敏感的消息简单地通知用户错误的输入,并允许用户以他们熟悉的方式自行更正,这是一种更好的方法。

如果你试图干扰输入法本身,很可能会造成混乱和挫折。此外,在一系列设备上进行测试将产生数不清的怪癖。

而且,验证应该在服务器上执行,因为客户端验证可以被操纵。

客户端的验证应该只是为了方便用户。