我正在使用验证引擎使用正则表达式验证字段。我几乎完成了我的工作,但有一个问题。我无法为以下内容制作正则表达式:
- 不允许前导和尾随空格。
- 中间不允许有多个空格(允许单个空格)。
我只想要这些条件的正则表达式,这样我就可以把它放在任何领域。
我正在使用验证引擎使用正则表达式验证字段。我几乎完成了我的工作,但有一个问题。我无法为以下内容制作正则表达式:
我只想要这些条件的正则表达式,这样我就可以把它放在任何领域。
当每种语言都可以访问某种修剪功能时,坚持某人输入数据时没有前导或尾随空格是非常懒惰的(而且可用性真的很差)。同样使用双空格:只需替换" "
为" "
.
如果你真的必须用正则表达式来做,这应该工作:
/^\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$/);"
这样做更可取的原因是它更容易让人理解,并且您应该始终支持代码的可读性。
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/
/^(?!\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