JS正则表达式检查字符串的长度为字符数,介于最小值和最大值之间,不计算空格

JS regex to check a string is number of char long, between a min and max limit, not counting spaces

本文关键字:最小值 之间 空格 计算 最大值 字符串 检查 正则表达式 字符 JS      更新时间:2023-09-26

更新-用例:这是针对自定义元素上的自定义"模式"类属性。自定义属性/访问器接受任何正则表达式——我已经对这部分进行了编码。我需要这个特定的正则表达式供自己使用,而且我只有一个属性值(字符串)可以使用,而且它需要一个正则表达式,所以我必须让正则表达式执行所有必需的功能。

更新2:各位,如果您能想出一种方法,不使用带有需要正则表达式字符串的属性(validate=")的正则表达式,那么祝您好运。这是我的限制,也是我正在处理的问题。这是一个有效的问题,选民的支持并不能改变这一点,也没有帮助。认真地长大。

基本上,我需要一个正则表达式来检查字符串的长度是否符合所提供的最小和最大范围,而不计算字符串中的任何空格。例如:

var foo = ' a 1 b 2 - _ ';

在上面的变量foo中,有6个非空格字符,给定它们的总数,它们将适合3-6、5-7、6-10等范围。我需要一种方法来统计所有这些非空格字符并检查它们是否适合某个范围。

注意我不能接受这样的回答:"首先,用replace()从字符串中删除空格"或类似的东西——这一切都必须在regex中完成

如果你想要一个纯regex解决方案,我建议这样做:

function ok(text) {
  return text.match(/^'s*('S's*){3,7}$/);
}

将3和7分别替换为最小值和最大值。

只需数一下:

var foo = ' a 1 b 2 - _ ';
var count = foo.match(/'s[0-9a-zA-Z-_'s]/g).length;

我能够通过去掉's的出现并用空格表示它们来简化Charles提供的答案:

var text = 'foo bar';  
text.match(/^ *('S *){3,7}$/);
// this would validate the string is between 3 and 7
// characters long, after trimming out spaces or line breaks

注意:我让Charles在发布这篇文章之前更新他的答案,我只想确保以后查看这个问题的人看到最简单的表达:)