我正在使用验证引擎来验证带有正则表达式的字段。我几乎完成了我的工作,但有一个问题。我无法制作正则表达式:
我只想要这些条件的正则表达式,以便我可以将它放在任何字段上。
答案 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