Javascript Regexp替换输入字段中的符号
我有一个输入字段和一个带有regexp的代码,使得它只能键入数字Javascript Regexp替换输入字段中的符号,javascript,jquery,regex,Javascript,Jquery,Regex,我有一个输入字段和一个带有regexp的代码,使得它只能键入数字 $('input').keyup(function () { this.value = this.value.replace(/[^0-9]/g,''); }); 但当有人试图编辑字段中间的符号时,光标会放在字段的末尾。这使得编辑变得很困难,因为必须删除要编辑的符号之后的所有符号 一个简单的演示: 有人能帮我修复吗?只有当新字符串与旧字符串不同时,才应更换: $('input').keyup(function ()
$('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的范围,应该由浏览器/操作系统来处理 如果您向某人提供文本字段,他们希望能够在其中键入任何内容(在某些情况下除外,例如在移动电话上,可以定义特定键盘) 这是一种更好的方法,只需使用上下文敏感的消息通知用户错误的输入,并允许用户以熟悉的方式自行更正 如果您试图干扰输入法本身,很可能会造成混乱和挫折。此外,在一系列设备上进行测试会产生数不清的怪癖 此外,验证应该在服务器上执行,因为客户端验证是可以操作的
客户端的验证应该只为用户方便。您应该尝试一些类型的输入屏蔽插件,例如
请参阅更多示例。使用此代码,即使值无效,光标也不会放在单词的末尾。 这是dystroy的解决方案和我在互联网上找到的代码的结合。 我认为它仍然有很多缺陷,时间太长了,但也许它仍然可以帮助一些人。。。 非常感谢你们:)
是的,就是这样!非常感谢。
$("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!
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)
};
})