繁体   English   中英

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

[英]Regular Expression to provided max 2 spaces

我必须用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);
}

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

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


您可以使用

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

演示版

 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); 
 input:valid, .valid { color: green; } input:invalid, .invalid { color: red; } 
 <input id="text" pattern="[a-zA-Z]+(\\s[a-zA-Z]*){0,2}" maxlength="20" /> <div id="result"></div> 

说明:

  1. [a-zA-Z]+一次或多次匹配字母
  2. \\s :匹配一个空格字符
  3. {0,2} :将上一个类零匹配两次。

要检查字符串是否不超过20个字符,可以使用String.length属性。

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

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

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

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

要检查长度,而不必使用JS进行检查,请添加预读:

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

这就是说,“向前看,找到直到字符串末尾的1到20个字符”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM