正则表达式在开始和结束时禁止空间并且在字符之间只允许一个空格

时间:2017-01-29 11:52:25

标签: javascript

如何拒绝前导空格和结束空间,并且在JavaScript中的字符之间只允许一个空格?

我尝试了很多模式,这是最后一个:

^[^-\s][a-zA-Z0-9_\s-]*$

但这根本不允许空间。

我正在使用[a-zA-Z0-9_\s-],因为我只想允许使用英文字符。

此外,我不能使用修剪或更换。我将keypress绑定到html上的输入字段并检查模式,如果regex.test(e.key)为false,则禁用该事件。

4 个答案:

答案 0 :(得分:2)

如果你想要一个匹配有效输入的正则表达式,而不是像其他答案那样匹配无效输入,那么:

SQL Error(1064): You have an error in your SQL Syntax;

/^\S(?!.* )\S$/ 是一个非空间。中间部分是负向前瞻,确保在任何地方都没有两个空格。

答案 1 :(得分:0)

您只是尝试删除前导和尾随空格?尝试类似的东西:

str.match(/^\s+.*\s+$/g,'');

<强> UPD:

&#13;
&#13;
$(document).ready(function() {
  $('input').on('change keyup', function(e) {

    var str = $(e.target).val();
    var disallowed = str.match(/^\s+.*|.*\s+$/g);
    
    if (disallowed != null) {

      $('button').prop('disabled', true);
    } else {

      $('button').prop('disabled',false);
    }
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text">
<button>add</button>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这会根据您的要求验证给定的字符串:

var wrong = "  hello,   my dear   friend  ";
var right = "hello, my dear frind"

function validate(s){
  var validateRegEx = new RegExp(/^\s+|\s\s+|\s+$/g);
  return !s.match(validateRegEx);
}

console.log("Validation of '" + wrong + "': " + validate(wrong));
console.log("Validation of '" + right + "': " + validate(right));

答案 3 :(得分:0)

/^\s+|\s{2,}|\s+$/g就是你要找的。另外,它不是e.key您要验证的内容,而是this.value

示例:

&#13;
&#13;
document.getElementById("test").onkeyup = function() {
  var str = this.value;
  if (/^\s+|\s{2,}|\s+$/.test(str))
    this.className = "not-valid";
  else
    this.className = "";
}
&#13;
.not-valid{
  background-color: #FAA;
}

span{
  color: red;
  display: none;
}

.not-valid+span{
  display: inline;
}
&#13;
<input id="test" /><span> not valid</span>
&#13;
&#13;
&#13;