检查输入字符串是不是包含javascript中的数字

Posted

技术标签:

【中文标题】检查输入字符串是不是包含javascript中的数字【英文标题】:Check whether an input string contains a number in javascript检查输入字符串是否包含javascript中的数字 【发布时间】:2011-08-12 06:58:30 【问题描述】:

我的最终目标是验证输入字段。输入可以是字母或数字。

【问题讨论】:

你不需要 jQuery。 请编辑您的问题标题,使其更准确,例如“jQuery 输入仅验证字母字符”,因为您的描述导致“如何在字符串中查找数字”没有答案,因此它会导致与我们社区无关的搜索结果。谢谢! 编辑了问题标题中的“jQuery”,并替换为“javascript”。 @VKen,标题上不用加标签。 @Starx 指出,我只是保留问题海报开头的格式。 【参考方案1】:

如果我没记错的话,问题需要“包含数字”,而不是“是数字”。所以:

function hasNumber(myString) 
  return /\d/.test(myString);

【讨论】:

正是我需要的。谢谢 此解决方案不考虑非整数,如 3.2 或 1e4 确实如此。签入控制台: hasNumber("check 3.2 or 1e4") = true vs hasNumber("check no numbers") = false。因为 3.2 和 1e4 本身就包含数字。 为什么这个答案不在顶部? 它完全回答了提出的问题。【参考方案2】:

您可以使用 javascript 来执行此操作。不需要 Jquery 或正则表达式

function isNumeric(n) 
  return !isNaN(parseFloat(n)) && isFinite(n);

实施时

var val = $('yourinputelement').val();
if(isNumeric(val))  alert('number');  
else  alert('not number'); 

更新:要检查字符串中是否包含数字,您可以使用正则表达式来做到这一点

var matches = val.match(/\d+/g);
if (matches != null) 
    alert('number');

【讨论】:

matches != null 表示不是undefinednull,而matches !== null 表示具体不是null,而是通过undefined match() 返回一个数组或null。所以if (matches !== null) 应该没问题(它会取悦 JSHint。)来源:developer.mozilla.org/en/docs/Web/JavaScript/Reference/… 第一个例子中应该是isFinite(parseFloat(n))isNumeric("5,000") 失败。 @Starx,我同意。但是如果你不支持格式化字符串作为输入,那你为什么要在isNaN 中使用解析浮点数呢?我建议要么从isNaN 中删除解析浮点数,要么将其添加到isFinite 中。【参考方案3】:
function validate()    
    var re = /^[A-Za-z]+$/;
    if(re.test(document.getElementById("textboxID").value))
       alert('Valid Name.');
    else
       alert('Invalid Name.');      

【讨论】:

我必须阅读整个问题才能意识到这实际上回答了所提出的确切问题。问题标题有点欺骗性。【参考方案4】:

这就是你需要的。

      var hasNumber = /\d/;   
      hasNumber.test("ABC33SDF");  //true
      hasNumber.test("ABCSDF");  //false 

【讨论】:

【参考方案5】:

它无论如何都不是防弹的,但它对我的目的有用,也许它会帮助某人。

var value = $('input').val();
 if(parseInt(value)) 
  console.log(value+" is a number.");
 
 else 
  console.log(value+" is NaN.");
 

【讨论】:

Boolean(parseInt(3)) -> true; Boolean(parseInt("3")) -> true; Boolean(parseInt("three")) -> false【参考方案6】:

使用Regular Expressions with JavaScript。正则表达式是用于描述搜索模式的特殊文本字符串,以 /pattern/modifiers 的形式编写,其中“pattern”是正则表达式本身,“modifiers”是表示各种选项的一系列字符。 character class 是文字匹配后最基本的正则表达式概念。它使一个小的字符序列匹配更大的字符集。例如,[A-Z] 可以代表大写字母,\d 可以代表任何数字。

下面的例子

contains_alphaNumeric « 它检查字符串是否包含字母或数字(或)同时包含字母和数字。 hyphen (-) is ignoredonlyMixOfAlphaNumeric « 它检查字符串是否包含任意顺序的letters and numbers only。

例子:

function matchExpression( str ) 
    var rgularExp = 
        contains_alphaNumeric : /^(?!-)(?!.*-)[A-Za-z0-9-]+(?<!-)$/,
        containsNumber : /\d+/,
        containsAlphabet : /[a-zA-Z]/,

        onlyLetters : /^[A-Za-z]+$/,
        onlyNumbers : /^[0-9]+$/,
        onlyMixOfAlphaNumeric : /^([0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+)[0-9a-zA-Z]*$/
    

    var expMatch = ;
    expMatch.containsNumber = rgularExp.containsNumber.test(str);
    expMatch.containsAlphabet = rgularExp.containsAlphabet.test(str);
    expMatch.alphaNumeric = rgularExp.contains_alphaNumeric.test(str);

    expMatch.onlyNumbers = rgularExp.onlyNumbers.test(str);
    expMatch.onlyLetters = rgularExp.onlyLetters.test(str);
    expMatch.mixOfAlphaNumeric = rgularExp.onlyMixOfAlphaNumeric.test(str);

    return expMatch;


// html Element attribute's[id, name] with dynamic values.
var id1 = "Yash", id2="777", id3= "Yash777", id4= "Yash777Image4"
    id11= "image5.64", id22= "55-5.6", id33= "image_Yash", id44= "image-Yash"
    id12= "_-.";
console.log( "Only Letters:\n ", matchExpression(id1) );
console.log( "Only Numbers:\n ", matchExpression(id2) );
console.log( "Only Mix of Letters and Numbers:\n ", matchExpression(id3) );
console.log( "Only Mix of Letters and Numbers:\n ", matchExpression(id4) );

console.log( "Mixed with Special symbols" );
console.log( "Letters and Numbers :\n ", matchExpression(id11) );
console.log( "Numbers [-]:\n ", matchExpression(id22) );
console.log( "Letters :\n ", matchExpression(id33) );
console.log( "Letters [-]:\n ", matchExpression(id44) );

console.log( "Only Special symbols :\n ", matchExpression(id12) );

输出:

Only Letters:
  containsNumber: false, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: true, mixOfAlphaNumeric: false
Only Numbers:
  containsNumber: true, containsAlphabet: false, alphaNumeric: true, onlyNumbers: true, onlyLetters: false, mixOfAlphaNumeric: false
Only Mix of Letters and Numbers:
  containsNumber: true, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: true
Only Mix of Letters and Numbers:
  containsNumber: true, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: true
Mixed with Special symbols
Letters and Numbers :
  containsNumber: true, containsAlphabet: true, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false
Numbers [-]:
  containsNumber: true, containsAlphabet: false, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false
Letters :
  containsNumber: false, containsAlphabet: true, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false
Letters [-]:
  containsNumber: false, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false
Only Special symbols :
  containsNumber: false, containsAlphabet: false, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false

java Pattern Matching 使用正则表达式。

【讨论】:

【参考方案7】:

测试任何 char 是否为数字,无需矫枉过正❓,根据需要进行调整。

const s = "EMA618"

function hasInt(me)
  let i = 1,a = me.split(""),b = "",c = "";
  a.forEach(function(e)
   if (!isNaN(e))
     console.log(`CONTAIN NUMBER «$e» AT POSITION $a.indexOf(e) => TOTAL COUNT $i`)
     c += e
     i++
    else b += e
  )
  console.log(`STRING IS «$b», NUMBER IS «$c»`)
  if (i === 0)
    return false
    // return b
   else 
    return true
    // return +c
  



hasInt(s)

【讨论】:

【参考方案8】:

检查它的一种方法是遍历字符串并在您点击一个数字时返回真(或假,取决于您想要什么)。

function checkStringForNumbers(input)
    let str = String(input);
    for( let i = 0; i < str.length; i++)
              console.log(str.charAt(i));
        if(!isNaN(str.charAt(i)))           //if the string is a number, do the following
            return true;
        
    

【讨论】:

【参考方案9】:

您可以使用 javascript 来执行此操作。不需要 Jquery 或正则表达式

function isNumeric(n) 

  return !isNaN(n);

【讨论】:

矫枉过正。可能只是function isNumeric(n) return !isNaN(n); 这也不会检查任何字符是否为数字。但我能想到一个受此启发的解决方案。 这只会检查它是否是一个数字,而不是它是否包含一个数字。 “ABC123”将解析为假,而它应该解析为真。另外为什么要创建一个额外的函数而不是 if ( !isNaN(str) ) ?【参考方案10】:

parseInt在字符串以整数表示开头时提供整数:

(parseInt '1a')  is  1

..所以也许:

isInteger = (s)->
  s is (parseInt s).toString()  and  s isnt 'NaN'

(isInteger 'a') is false
(isInteger '1a') is false
(isInteger 'NaN') is false
(isInteger '-42') is true

请原谅我的 CoffeeScript。

【讨论】:

基本上,parseInt('10m') /* returns 10*/ 会做到这一点如果字符串以数字开头。否则返回 NaN。如果您完全可以接受这种行为,请考虑parseFloat('2.34million'),这样您就可以得到 2.34 而不是赔钱 ;-)【参考方案11】:

此代码还有助于“检测给定字符串中的数字”,当发现数字时它会停止执行。

function hasDigitFind(_str_) 
  this._code_ = 10;  /*When empty string found*/
  var _strArray = [];

  if (_str_ !== '' || _str_ !== undefined || _str_ !== null) 
    _strArray = _str_.split('');
    for(var i = 0; i < _strArray.length; i++) 
      if(!isNaN(parseInt(_strArray[i]))) 
        this._code_ = -1;
        break;
       else 
        this._code_ = 1;
      
    

  
  return this._code_;

【讨论】:

【参考方案12】:

下面的代码检查相同的数字、序号和倒序号。

function checkNumSequnce(arrayNM2) 
    inseqCounter=1;
    continousSeq = 1;
    decsequenceConter = 1;
    var isequence = true;
    for (i=0;i<arrayNM2.length-1;i++) 
      j=i+1;
      if (arrayNM2[i] == arrayNM2[i+1])  
                if(inseqCounter > 1 || decsequenceConter > 1)
                    isequence =  false; break;
                        
                 continousSeq++; 
                             
                  
        else if (arrayNM2[j]- arrayNM2[i] == 1) 
            if(decsequenceConter > 1 || continousSeq > 1)
                isequence =  false; break;  
                    
             inseqCounter++;               
                        
         else if(arrayNM2[i]- arrayNM2[j] == 1)
              if(inseqCounter > 1 || continousSeq > 1)
                   isequence =  false; break;
               
              decsequenceConter++;
        else
              isequence= false;
              break;
        
  ;

  console.log("isequence: "+ isequence); 

  ;

【讨论】:

这无疑是我见过的最令人困惑和冗长的 SO 解决方案 @kshitij 这是用于连续和重复数字验证的答案。可能这个答案不是 100% 匹配这个问题。但是逻辑很好。谢谢【参考方案13】:

我们可以使用!/[^a-zA-Z]/.test(e)查看它 只需运行 sn-p 并检查。

function handleValueChange() 
  if (!/[^a-zA-Z]/.test(document.getElementById('textbox_id').value)) 
      var x = document.getElementById('result');
      x.innerHTML = 'String does not contain number';
   else 
    var x = document.getElementById('result');
    x.innerHTML = 'String does contains number';
  
input 
  padding: 5px;
<input type="text" id="textbox_id" placeholder="Enter string here..." oninput="handleValueChange()">
<p id="result"></p>

【讨论】:

【参考方案14】:

你也可以试试lodash:

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))

【讨论】:

以上是关于检查输入字符串是不是包含javascript中的数字的主要内容,如果未能解决你的问题,请参考以下文章

如何检查字符串是不是包含 JavaScript 中的子字符串?

如何检查字符串是不是包含 JavaScript 中的子字符串?

如何检查字符串是不是包含 JavaScript 中的子字符串?

如何检查字符串是不是包含 JavaScript 中的子字符串?

如何检查一个字符串数组是不是包含 JavaScript 中的一个字符串? [复制]

JavaScript/jQuery - 如何检查字符串是不是包含特定单词