最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Using a regular expression to validate whether input has any non digits in it - Stack Overflow

programmeradmin0浏览0评论
function validInteger(theNumber){
    var anyNonDigits = new  RegExp('\D','g');
    if(parseInt(theNumber)&&!anyNonDigits.test(theNumber)){
        return true;
    }else{
        return false;
    }
}

Above is a function I've written to validate some input. I want all positive integers. The problem I'm facing is with the RegExp object. This seems like it should be super simple, but for some reason it's not working.

For example if I pass 'f5' I get true, but if I pass '5f' I get false. I'm also having problems when passing negative numbers. -3 doesn't get caught even if I stringify the variable before passing it into the RegExp. I can fix this by adding '&&parseInt(theNumber)>0' in my if statement, but I feel like the RegExp should catch that too. Thanks in advance!

function validInteger(theNumber){
    var anyNonDigits = new  RegExp('\D','g');
    if(parseInt(theNumber)&&!anyNonDigits.test(theNumber)){
        return true;
    }else{
        return false;
    }
}

Above is a function I've written to validate some input. I want all positive integers. The problem I'm facing is with the RegExp object. This seems like it should be super simple, but for some reason it's not working.

For example if I pass 'f5' I get true, but if I pass '5f' I get false. I'm also having problems when passing negative numbers. -3 doesn't get caught even if I stringify the variable before passing it into the RegExp. I can fix this by adding '&&parseInt(theNumber)>0' in my if statement, but I feel like the RegExp should catch that too. Thanks in advance!

Share Improve this question asked Jun 7, 2012 at 16:52 Frank BFrank B 6581 gold badge9 silver badges20 bronze badges 3
  • 1 The regular expression doesn't work because you need to escape the \ character since \ also has meaning in string literal notation. new RegExp('\\D','g'); – user1106925 Commented Jun 7, 2012 at 16:57
  • ...also, you wouldn't really need to g modifier, since it sounds as though even one non-digit should be enough to flag the input. – user1106925 Commented Jun 7, 2012 at 17:17
  • @amnotiam thanks for the info on why what I was doing wasn't working. Regular expressions are something I'm still new to. Hopefully I'll change that soon. – Frank B Commented Jun 7, 2012 at 18:24
Add a comment  | 

3 Answers 3

Reset to default 11

Simply:

function validInteger(theNumber){    
    return theNumber.match(/^\d+$/) && parseInt(theNumber) > 0;
}

Live DEMO

Or even simpler with regex only as suggested by @Eric:

return /^[0-9]\d*$/.test(theNumber);

Live DEMO

Update:

An excellent cheat sheet. The link died after 5 years, sorry.

If it's okay don't use RegExp, you can have:

function validInteger(theNumber){
    var number = +theNumber;

    return number > -1 && number % 1 === 0;
}

Assuming that you consider 0 as positive integer, and you don't want to make a distinction between +0 and -0.

Notice that this function will accept any value for theNumber that can be converted in a Number, so not just "string", and you can pass Number as well of course.

Be simple!

function validate(num){
    return (num | 0) > 0;
};

This function will return "true" only for positive integers.

发布评论

评论列表(0)

  1. 暂无评论