正则表达式替换符号输入字段
问题描述:
我有一个输入字段,并使用正则表达式,使得它能够仅仅型数字正则表达式替换符号输入字段
$('input').keyup(function() {
this.value = this.value.replace(/[^0-9]/g,'');
});
但一个代码,当有人试图在中场的编辑符号光标位于它的末尾。它会使编辑变得困难,因为您必须删除要编辑的符号后面的所有符号。
一个简单的演示:
有人可以帮我解决这个问题?
答
此时应更换只有当新的字符串是从旧的不同:
$('input').keyup(function() {
var v = this.value.replace(/[^0-9]/g,'');
if (v!=this.value) this.value = v;
});
这样光标将不会在年底只要值有效投入。
答
你不应该拉地毯下别人的脚。你试图做的事情超出了javascript的范围,应该由浏览器/操作系统来处理。
如果您呈现文本字段的人,他们希望能够键入任何在那里(除了手机例如,在一个特定的键盘可以定义某些情况下)。
这是一个很大更好的方法简单地通知不正确输入的用户,与上下文敏感的消息,并允许他们改正自己的方式,他们都很熟悉。
如果你尝试用输入法本身的干扰,很容易造成混乱,和沮丧。此外,在一系列设备上进行测试会产生无法估量的怪癖。
此外,验证应该在服务器上执行,因为客户端验证可以被操纵。
客户端验证应仅为用户提供方便。
答
你应该尝试一些类型的输入屏蔽的插件,例如,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!
查看更多的示例here。
答
有了这个代码,光标不会在单词的末尾放即使该值是无效的。 它是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
没错,就是它!谢谢! – sealla 2013-04-22 13:34:27