正则表达式提供最多2个空格

时间:2016-01-07 06:59:14

标签: javascript regex

我必须在JavaScript中编写一个正则表达式,以满足下面的

a) accept only alphabetic characters(small/caps)
b) should not exceed beyond 20 characters 
c) max 2 spaces can be provided.

有效的测试用例

a) Name
b) name
c) namea nameb
d) namea nameb namecd
e) namea  nameb (2 consecutive spaces is also valid but total number of spaces cannot be more than 2)

我的尝试(但没有工作)

function test(){

    var originalString="abc rt t tt";
    var myRegEx = /^([a-zA-Z ]{1,20})+$/;   
    var isValid = myRegEx.test(originalString);
    alert(isValid);
}

错误是什么以及如何解决?

2 个答案:

答案 0 :(得分:2)

正则表达式/^([a-zA-Z ]{1,20})+$/将匹配一到二十个字母和/或空格一次或多次。所以,基本上这允许任何序列中的字母和空格任意次。

您可以使用

^[a-zA-Z]+(\s[a-zA-Z]*){0,2}$

Demo



var regex = /^[a-zA-Z]+(\s[a-zA-Z]*){0,2}$/;

var result = document.getElementById('result');
document.getElementById('text').addEventListener('keyup', function(e) {
  var value = this.value;

  var isValid = value.length <= 20 && regex.test(value);
  result.innerHTML = isValid ? 'Valid' : 'InValid';
  result.className = isValid ? 'valid' : 'invalid';
}, false);
&#13;
input:valid, .valid {
  color: green;
}
input:invalid, .invalid {
  color: red;
}
&#13;
<input id="text" pattern="[a-zA-Z]+(\s[a-zA-Z]*){0,2}" maxlength="20" />
<div id="result"></div>
&#13;
&#13;
&#13;

<强>解释

  1. [a-zA-Z]+匹配字母表一次或多次
  2. \s:匹配空格字符
  3. {0,2}:将之前的班级归为零至两次。
  4. 要检查字符串是否不超过20个字符,可以使用String.length属性。

    if (str.length <= 20 && regex.test(str)) {
        // Valid
    } else {
        // Invalid
    }
    

答案 1 :(得分:1)

您可以检查输入是否仅包含字母,最多包含两个内部空格,如下所示:

/^[a-z]+ ?[a-z]* ?[a-z]+$/i

换句话说,从头开始,匹配一个或多个字母的序列,然后可能是一个空格,然后是一堆可能空的字母,然后再一个空格,最后是一个或多个字母的序列你到最后。

要检查长度,无需使用JS进行检查,请添加前瞻:

/^(?=.{1,20}$)[a-z]+ ?[a-z]* ?[a-z]+$/i
  ^^^^^^^^^^^^   LOOK-AHEAD TO LIMIT CHARS TO 20

这说,“向前看,找到一到二十个字符,直到字符串的结尾”。