2015-05-15 34 views
2

我有一個第三方應用程序,可以讓我輸入正則表達式來驗證文本框中的用戶輸入。我需要用戶以這種格式輸入數據C:64GB, F:128GB H:32GB。這是我寫的正則表達式:無法獲得正則表達式的工作

\b[A-z]{1}[:]?\d*(GB|gb)\b 

這個正則表達式工作正常,但它只驗證第一個塊。所以如果我寫C:64GB F:128,它將輸入標記爲有效。它不會檢查F:128,因爲這會導致輸入無效。它應該是C:64GB F:128GB

當我將正則表達式更改爲^\b[A-z]{1}[:]?\d*(GB|gb)\b$時,它只允許我輸入C:64GB

我在這裏做錯了什麼?

+1

'[Az] {1}'你不需要'{1}'量詞 – Downgoat

+0

不清楚用戶ID格式是什麼。你能寫一些例子和反例嗎? –

+1

所有細分後面都應該有逗號,還是僅在第一個或之後?只有第一個如果是C:? –

回答

2

你可以使用這個表達式:

^(\W*[A-Za-z]:?\d+(?:GB|gb)\W*)+$ 
+0

此表達式正常工作,但如果用戶使用空格或逗號或換行符分隔多個驅動器,則需要該表達式有效。現在它只能用於空間。這就是爲什麼我使用\ b。是否有可能這樣做? – Asdfg

+0

好吧現在嘗試我更新的正則表達式。它可以處理任何非單詞字符,即空格,逗號,冒號,分號等。 – anubhava

+1

謝謝。有效。 – Asdfg

0

你可以使用像這樣:^[A-Z]:?\d+(GB|gb),([A-Z]:?\d+(GB|gb)){2}$。這將期望匹配整個模式。你可以看到一個工作示例here

0

這是因爲RegEx很渴望。它會找到第一個匹配,然後停下來。您可以通過所有的比賽需要循環或應用全球修飾符(指找到所有的比賽)

2

可以使用i不區分大小寫的標誌,以幫助簡化呼叫

/^([A-Z]:?\d+GB[\s,]*)+$/i 

這裏有一個demo on regex101.com

這將是相當寬容與空格/逗號感謝[\s,]*

0

您的正則表達式將是有效的,因爲它只是尋找至少1有效的正則表達式等值,並作爲y ou看到它,你的第一個事件驗證它,正則表達式是有效的。如果你想要檢查你的所有用戶輸入,你應該把你的輸入字符串分成幾個等同的正則表達式,並逐個檢查它們。還是做一個正則表達式的等價物,而且會給這個:

^([A-Z]:?\d+[Gg][Bb] ?)+$ 

旁註:

  • 我刪除了{1}後您的[AZ],因爲它是正則表達式的默認行爲,
  • 我把你的\ b變成了^和$,因爲你需要控制整個字符串而不是它的一部分
  • 我刪除了[],因爲它沒用(你只需要1個值之間的許多值)
  • 我的廣告以空格作爲分隔符,但是你可以用任何字符替換它
  • 我用[Gg] [Bb]代替了你的(GB | gb),所以在你的這部分用戶輸入中不會區分大小寫
相關問題