2013-01-23 39 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