Javascript只允许文本末尾的数字

时间:2015-06-18 01:36:24

标签: javascript regex

我有这个脚本只允许负数的 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();
    }
}

4 个答案:

答案 0 :(得分: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+$

Regular expression visualization

<强>描述

/-?\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

答案 1 :(得分:0)

如果您喜欢正则表达式,可以尝试使用此

(-|[0-9]?)[0-9]+

这意味着开始是 - 或数字。然后只有数字

答案 2 :(得分:0)

你只需稍微修改你的正则表达式!

var regex = /-?\d+ /

?表示0或1,d +仅验证数字。

答案 3 :(得分:0)

只能使用正则表达式/^-?\d+$/匹配正负整数。

<强>解释

^ - 字符串的开头

-? - 可选的负号{贪婪; 0-1}

\d+ - 一个或多个十进制数字,即[0-9] {贪心; 1无穷}

$ - 字符串结尾

<强>演示:

> /^-?\d+$/.test('42')
true
> /^-?\d+$/.test('-42')
true
> /^-?\d+$/.test('42-')
false
> /^-?\d+$/.test('a42')
false
> /^-?\d+$/.test('42b')
false