检查输入字符串是不是包含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
表示不是undefined
或null
,而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 ignored。
onlyMixOfAlphaNumeric
« 它检查字符串是否包含任意顺序的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 中的子字符串?