jQuery / 正则表达式:如何将字符串与多个子字符串进行比较
jQuery / Regex: How to compare string against several substrings
我有一个特殊的验证需求,我需要检查一个字符串是否包含多个子字符串中的任何一个,如下表所示:
12
23
34
45
56
67
78
89
90
01
我是 jQuery 的新手,我在这里唯一能想到的是以下对我来说不太好的内容:
if(str.indexOf("12") >= 0 || str.indexOf("23") >= 0 || str.indexOf("34") >= 0 || str.indexOf("45") >= 0 || str.indexOf("56") >= 0 || str.indexOf("67") >= 0 || str.indexOf("78") >= 0 || str.indexOf("89") >= 0 || str.indexOf("90") >= 0 || str.indexOf("01") >= 0){
// do stuff
}
有没有更好的方法 我可以将一个字符串与多个子字符串进行比较,例如使用正则表达式或数组?
此外,我还需要计算我没有找到方法的匹配次数。
非常感谢您对此提供的帮助。
您可以将其转换为更易于维护的格式,而无需使用正则表达式。这是使用数组实现目标的一种方法:
var str = '2042038423408';
// Super-quick one-liner (split here for visibility)
var matchCount = $.grep(['12', '23', '34', '45', '56', '67', '78', '89', '90', '01'], function(num, i) {
return str.indexOf(num) !== -1;
}).length; // should be 2
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
或者您可以创建一些不错的可重复使用的小函数:
var valuesToCheck = ['12', '23', '34', '45', '56', '67', '78', '89', '90', '01'];
// Pure JavaScript
function howManyMatches(testString) {
var matches = 0;
for (var valueIndex = 0; valueIndex < valuesToCheck.length; valueIndex++) {
if (testString.indexOf(valuesToCheck[valueIndex]) !== -1) {
matches++;
}
}
return matches;
}
// Here's the jQuery version again
function howManyMatches2(testString) {
return $.grep(valuesToCheck, function(num, i) {
return testString.indexOf(num) !== -1;
}).length;
}
// Usage
var letsTest = howManyMatches('282982902090229892');
var letsTest2 = howManyMatches2('282982902090229892');
console.log('JavaScript: ' + letsTest); // 2
console.log('jQuery: ' + letsTest2); // 2
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
您可以使用正则表达式。易维护纯Javascript(无jQuery):
var string = "20420384213408";
var reg = /12|23|34|45|56|67|78|89|90|01/;
if (string.match(reg)) {
//do stuff
console.log(string.match(reg).length);
}
我有一个特殊的验证需求,我需要检查一个字符串是否包含多个子字符串中的任何一个,如下表所示:
12
23
34
45
56
67
78
89
90
01
我是 jQuery 的新手,我在这里唯一能想到的是以下对我来说不太好的内容:
if(str.indexOf("12") >= 0 || str.indexOf("23") >= 0 || str.indexOf("34") >= 0 || str.indexOf("45") >= 0 || str.indexOf("56") >= 0 || str.indexOf("67") >= 0 || str.indexOf("78") >= 0 || str.indexOf("89") >= 0 || str.indexOf("90") >= 0 || str.indexOf("01") >= 0){
// do stuff
}
有没有更好的方法 我可以将一个字符串与多个子字符串进行比较,例如使用正则表达式或数组? 此外,我还需要计算我没有找到方法的匹配次数。
非常感谢您对此提供的帮助。
您可以将其转换为更易于维护的格式,而无需使用正则表达式。这是使用数组实现目标的一种方法:
var str = '2042038423408';
// Super-quick one-liner (split here for visibility)
var matchCount = $.grep(['12', '23', '34', '45', '56', '67', '78', '89', '90', '01'], function(num, i) {
return str.indexOf(num) !== -1;
}).length; // should be 2
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
或者您可以创建一些不错的可重复使用的小函数:
var valuesToCheck = ['12', '23', '34', '45', '56', '67', '78', '89', '90', '01'];
// Pure JavaScript
function howManyMatches(testString) {
var matches = 0;
for (var valueIndex = 0; valueIndex < valuesToCheck.length; valueIndex++) {
if (testString.indexOf(valuesToCheck[valueIndex]) !== -1) {
matches++;
}
}
return matches;
}
// Here's the jQuery version again
function howManyMatches2(testString) {
return $.grep(valuesToCheck, function(num, i) {
return testString.indexOf(num) !== -1;
}).length;
}
// Usage
var letsTest = howManyMatches('282982902090229892');
var letsTest2 = howManyMatches2('282982902090229892');
console.log('JavaScript: ' + letsTest); // 2
console.log('jQuery: ' + letsTest2); // 2
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
您可以使用正则表达式。易维护纯Javascript(无jQuery):
var string = "20420384213408";
var reg = /12|23|34|45|56|67|78|89|90|01/;
if (string.match(reg)) {
//do stuff
console.log(string.match(reg).length);
}