用于验证字段的正则表达式

时间:2013-01-23 11:04:01

标签: javascript regex

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

  1. 不允许使用前导和尾随空格。
  2. 不允许介于两者之间的空格(允许单个空格)。
  3. 我只想要这些条件的正则表达式,以便我可以将它放在任何字段上。

3 个答案:

答案 0 :(得分: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$/);"

这样做更可取的原因是某人理解起来要容易得多,而且你应该总是喜欢你的代码中的可读性。

答案 1 :(得分: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/

答案 2 :(得分: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