Javascript仅允许文本末尾的数字[重复]
Posted
技术标签:
【中文标题】Javascript仅允许文本末尾的数字[重复]【英文标题】:Javascript only allow numbers at end of text [duplicate] 【发布时间】:2015-09-03 11:42:30 【问题描述】:我有这个脚本,它只允许负数的 0-9 和 - 字符。但是,这不会阻止用户输入例如 123- 并且会导致错误。有解决方法吗?我更喜欢尽可能地坚持使用 javascript。但是如果没有其他方法,我对插件持开放态度。
通过不允许其他字符(例如字母)运行良好。但我需要防止用户在末尾或除行首之外的任何其他部分输入 -。
function validate(evt)
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode( key );
var regex = /[0-9-]|\./;
if( !regex.test(key) )
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
【问题讨论】:
/[\+\-]?(?:\d*\.?\d+)/
我用它作为数字的正则表达式。
我尝试了这两个但我无法进入 - 也许我做错了什么
var 正则表达式 = /[0-9-]|\./;我用 var regex = /[\+\-]?(?:\d*\.?\d+)/ 替换该部分
您希望允许十进制数?
整数和 - 仅用于负值。但是 - 只能在开始时被允许。不在行中或行尾
【参考方案1】:
jsFiddle
JS
// validates the key down event
function validate(evt)
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode(key);
// checks if it is a digit or first char is a -
if (!/^-?\d+/.test(key))
console.log(key);
// stops event 100% if it isn't what you want
evt.stopPropagation();
evt.preventDefault();
evt.returnValue = false;
evt.cancelBubble = true;
return false;
正则表达式
^-?\d+$
说明
/-?\d+/
^ assert position at start of the string
-? matches the character - literally
Quantifier: ? Between zero and one time, as many times as possible, giving back as needed [greedy]
\d+ match a digit [0-9]
Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
$ assert position at end of the string
【讨论】:
嗯,我无法输入 - 即使是第一个字符。我的字符代码 - 是 189 可能完全不同? @aozora 你是对的,这是因为键码的东西......让我来解决这个问题。【参考方案2】:如果你喜欢正则表达式,你可以试试这个
(-|[0-9]?)[0-9]+
这意味着 start 是 - 或数字。然后只有数字
【讨论】:
【参考方案3】:您只需要稍微修改一下您的正则表达式!
var regex = /-?\d+
/
?表示 0 或 1,d+ 将仅验证数字。
【讨论】:
【参考方案4】:使用正则表达式 /^-?\d+$/
可以只匹配正整数和负整数。
说明:
^
- 字符串开头
-?
- 可选负号 贪婪; 0-1
\d+
- 一个或多个十进制数字,即 [0-9] greedy; 1-无穷大
$
- 字符串结束
演示:
> /^-?\d+$/.test('42')
true
> /^-?\d+$/.test('-42')
true
> /^-?\d+$/.test('42-')
false
> /^-?\d+$/.test('a42')
false
> /^-?\d+$/.test('42b')
false
【讨论】:
以上是关于Javascript仅允许文本末尾的数字[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 正则表达式将文本字段限制为仅数字(必须允许不可打印的键)