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 正则表达式将文本字段限制为仅数字(必须允许不可打印的键)

数字仅输入数字[重复]

验证文本框只允许数字,没有特殊字符或字母[重复]

格式化c#文本框只允许数字字符[重复]

jQuery:限制文本框仅输入“数字”的最佳方法是啥? (允许小数点)

如何仅在文本字段中输入数字[重复]