2013-01-23 33 views
0

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

  1. 不允许使用前导和尾随空格。
  2. 不允许多个空格(单个空格是允许的)。

我只想要这些条件的正则表达式,以便我可以把它放在任何字段上。

+1

甚至在阅读您的问题之前,我需要知道***您尝试过什么?*** – VisioN

+2

您可以只清理这些空格而不是进行验证...... – nhahtdh

+0

我试过/^\ + | \ + $ /但没有得到我需要的东西。 – sanjay

回答

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/

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 
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$/);" 

的原因,这是最好的,它是一个更容易的人明白了,你应该总是在你的代码可读性青睐。

+0

Upvote为最后的选择。顺便说一句,它也可以用来替换所有的空间。 – nhahtdh