0

我正在使用验证引擎使用正则表达式验证字段。我几乎完成了我的工作,但有一个问题。我无法为以下内容制作正则表达式:

  1. 不允许前导和尾随空格。
  2. 中间不允许有多个空格(允许单个空格)。

我只想要这些条件的正则表达式,这样我就可以把它放在任何领域。

4

3 回答 3

2

当每种语言都可以访问某种修剪功能时,坚持某人输入数据时没有前导或尾随空格是非常懒惰的(而且可用性真的很差)。同样使用双空格:只需替换" "" ".

如果你真的必须用正则表达式来做,这应该工作:

/^\S+(?!.*\s\s).*\S$/

这确实假设有效字符串至少有两个字符(开头的 \S 和结尾的 \S)。如果您想允许单个字符串,这将起作用:

/^(?!\s.*)(?!.*\s\s).*\S$/

或者,如果您尝试反向操作并匹配无效输入,这将起作用(即,此正则表达式的任何匹配都意味着字符串无效):

/^\s|\s\s|\s$/

除非有充分的理由不能这样做,否则即使匹配有效输入,最后一个选项也可能是最好的。即是这样的:

var isValid = !value.match(/^\s|\s\s|\s$/); // instead of "var isInvalid = value.match(/^\s|\s\s|\s$/);"

这样做更可取的原因是它更容易让人理解,并且您应该始终支持代码的可读性。

于 2013-01-23T11:12:53.180 回答
0
var s = "test test  test ";

// Find multiple spaces
if(s.indexOf("  ") !== -1) {
    alert('Multiple spaces found');
}

// Find leading or trailing space
if (s.indexOf(" ", 0) === 0 || s.indexOf(" ", s.length-1) != -1) {
    alert("Leading or trailing space found");
}

请参阅此小提琴示例http://jsfiddle.net/powtac/b5mHr/2/

于 2013-01-23T11:10:40.503 回答
0
/^(?!\s)(?!.*\s{2})(?!.*\s$)/

应该这样做,除非您的输入可能包含换行符。如果是这种情况,请使用[\s\S]而不是..

解释:

^           # Start of string
(?!\s)      # Assert that the first character isn't whitespace
(?!.*\s{2}) # Assert that there are no two consecutive whitespace characters
(?!.*\s$)   # Assert that the last character isn't whitespace
于 2013-01-23T11:12:35.430 回答