我正在使用驗證引擎用正則表達式驗證字段。我幾乎完成了我的工作,但有一個問題。我無法制作正則表達式:用於驗證字段的正則表達式
- 不允許使用前導和尾隨空格。
- 不允許多個空格(單個空格是允許的)。
我只想要這些條件的正則表達式,以便我可以把它放在任何字段上。
我正在使用驗證引擎用正則表達式驗證字段。我幾乎完成了我的工作,但有一個問題。我無法制作正則表達式:用於驗證字段的正則表達式
我只想要這些條件的正則表達式,以便我可以把它放在任何字段上。
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
堅持有人進入數據沒有前導或尾隨空格時,每一種語言都有獲得某種微調功能是非常懶惰(和非常糟糕的可用性)。同樣用雙空格:只需將" "
替換爲" "
即可。
如果你真的必須使用正則表達式做到這一點,這應該工作:
/^\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$/);"
的原因,這是最好的,它是一個更容易的人明白了,你應該總是在你的代碼可讀性青睞。
Upvote爲最後的選擇。順便說一句,它也可以用來替換所有的空間。 – nhahtdh
甚至在閱讀您的問題之前,我需要知道***您嘗試過什麼?*** – VisioN
您可以只清理這些空格而不是進行驗證...... – nhahtdh
我試過/^\ + | \ + $ /但沒有得到我需要的東西。 – sanjay