2017-04-12 100 views
0

我試圖想出一個正則表達式來檢測Javascript中的字符串是否被修剪。這意味着,它的開頭或結尾沒有空格。Javascript:檢測一個字符串是否被修剪

到目前爲止,我有

^[^\s].*[^\s]$ 

這工作如果字符串很長,但對於短字符串,如a,因爲該模式想要一個非空格,任何字符,然後又非它不會工作-空間。 a被修剪,但不符合該模式。

幫我看看正確的正則表達式。

+0

爲什麼正則表達式的結束相匹配的下一個部分? IMO'str.trim()=== str'更具可讀性 – Kaiido

+0

我在這裏沒有使用命令式編程。這就是爲什麼我需要聲明一個正則表達式。更確切地說,我在validate.js中使用了這個正則表達式,它是一個指定驗證器和東西的庫。所以你說的這條線在這裏不會有用。 –

+0

確定不夠... – Kaiido

回答

1

嘗試使用此方法使第二個字符可選:

^[^\s](.*[^\s])?$ 
+0

正如令人難以置信的驚人的馬克安東預計。這工作。 –

+0

'regex.test('a') true regex.test('a') true regex.test('a')' true'這不能正常工作!即使在開始或結束時有空間,它也表現出真實性。 –

+0

編輯了答案。應該現在工作... –

1

一種選擇是把你現有的正則表達式(^[^\s].*[^\s]$),並添加一個單獨的部分,它專門用於測試一個非空格字符(^[^\s]$ ),兩個部分用|結合:

/(^[^\s]$)|(^[^\s].*[^\s]$)/ 

但我有時會發現這是簡單測試了相反的情況,然後用!反轉的結果。所以你的情況,有開頭或空格結束的正則表達式測試:

!/(^\s)|(\s$)/.test(someString) 

的功能封裝:

function isTrimmed(s) { 
 
    return !/(^\s)|(\s$)/.test(s) 
 
} 
 

 
console.log(isTrimmed(" a ")) // false 
 
console.log(isTrimmed("a ")) // false 
 
console.log(isTrimmed(" a")) // false 
 
console.log(isTrimmed("a"))  // true 
 
console.log(isTrimmed("abc")) // true 
 
console.log(isTrimmed("a b c")) // true 
 
console.log(isTrimmed(""))  // true

0

您可以使用下面的正則表達式:

^([\s]+[\w]*)?([\w]*[\s]+)?$ 
0

(?=^\S)[\W\w]*\S$

  • (?=^\S)先行在字符串的開頭(不消耗字符串匹配;將再次從第一個字符開始匹配)
  • [\W\w]*匹配任何數目的字符
  • 在字符串

所以對於a結束\S$匹配非空格字符:

  • (?=^\S)匹配a在字符串的開頭(重置當前位置到字符串的開頭)
  • [\W\w]*匹配任何字符,因爲它需要
  • \S$匹配a在字符串