javascript - RegExp 问题 - 字符限制和空白忽略

标签 javascript regex

我需要验证一个可以包含任意数量的字符、一个逗号,然后是 2 个字符的字符串。我有一些问题。这是我所拥有的:

var str="ab,cdf"; 
var patt1=new RegExp("[A-z]{2,}[,][A-z]{2}");
if(patt1.test(str)) {
    alert("true");
}
else {
    alert("false");
}

我希望它返回 false,因为我对逗号后的字符有 {2} 限制,并且该字符串包含三个字符。当我运行fiddle时但是,它返回 true。我对 RegExp 的理解(诚然有限)表明 {2,} 至少是 2,而 {2} 恰好是 2,所以我不确定为什么是三个字符逗号后仍然返回 true。

我还需要能够忽略逗号和其余两个字符之间可能存在的空格。 (换句话说,如果逗号前有 2 个以上字符,逗号后有两个字符,我希望它返回 true - 逗号后的两个字符不包括用户可能输入的任何空格。)

所以所有这些都应该返回 true:

var str = "ab, cd";
var str = "abc, cd";
var str = "ab,cd";
var str = "abc,dc";

我尝试在逗号后面添加 \S 指示符,如下所示:

var patt1=new RegExp("[A-z]{2,}[,]\S[A-z]{2}");

但是该字符串始终返回 false,即使我将其设置为 ab, cd,它应该返回 true。

我错过了什么?

最佳答案

{2,} is at least 2, and {2} is exactly two, so I'm not sure why three characters after the comma are still returning true.

这是正确的。你忘记的是anchor字符串开始和结束的表达式 - 否则,当它出现在字符串中的某个位置时,它返回 true。

not including any whitespace: I've tried adding the \S indicator after the comma

事实恰恰相反。 \s 匹配空白字符,\S 匹配所有非空白字符。另外,您可能想要一些 optional repetition空白,而不是要求精确的空白。

[A-z]

请注意,此字符范围还包括 Za 之间的字符,即 []^_`。您可能需要使用 [A-Za-z],或者使用 [a-z] 并使正则表达式不区分大小写。

组合起来,您的正则表达式应如下所示(使用 regular expression literal 而不是带有字符串文字的 RegExp 构造函数):

var patt1 = /^[a-z]{2,},\s*[a-z]{2}$/i;

关于javascript - RegExp 问题 - 字符限制和空白忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17751150/

相关文章:

javascript - 映射/过滤/减少数组

c - 用于从 HTTP 响应中获取颜色名称的正则表达式

ios - 如何在 iOS Swift4.2 中验证名称(John D'Largy)?

java - 正则表达式 rpg 函数

javascript - "show/hide"带有 javascript 的 div 而不是 jquery,并且不带有显示 :none

javascript - 三.js透明png纹理奇怪边框webgl

javascript - 从javascript中的对象的键值对中删除键

javascript - 这是什么(函数字面量)

javascript - 如何从来自服务器的日期中以 dd/mm/yyyy 格式仅提取月份和年份(作为字符串)并将其存储在变量中?

php - 使用正则表达式检查类似索引的模式