2012-05-21 380 views
-3

我需要匹配一個字母數字字。它可以包含「 - 」,但不能在結尾或開始,「 - 」不能重複(如「 - 」),字長度必須在2到24個字符之間。正則表達式 - 匹配

一些例子:

adfg 
asd-asdasd 
asd-asd-asd 

這些不應該匹配:

-asd 
asd- 
-asd- 
-asd--asd- 
+4

我看不到嘗試顯示。 –

+1

'(\ w +( - \ w +)*){2,24}'注意'\ w'包含下劃線。你可以用'[0-9a-zA-Z]'代替。 – inhan

回答

1

使用正則表達式最困難的事情之一是抵制過度聰明的誘惑。你有兩個單獨的,不兼容的測試來執行。長度:

/^.{2,24}$/ 

...和組成:

/^[A-Z0-9]+(?:-[A-Z0-9]+)*$/i 

雖然可能有可能拿出,將在一個過程,執行這兩個測試正則表達式,有沒有必要。只要做其中之一作爲預測:

/^(?=.{2,24}$)[A-Z0-9]+(?:-[A-Z0-9]+)*$/i 
0

試試這個PCRE REG EXP:

/^(([0-9a-z]+-)*[0-9a-z]){2,24}$/i 
+0

謝謝,它很好用 – Nelson

+0

那麼爲什麼'/^(([0-9a-z]+-)*[0-9a-z]){2,24}$/i.test('ss-ss- ss-ss -ss-ss-ss-ss-ss-ss-ss-ss-ss-ss-ss -s')'返回true,如果它工作的很好? ) – raina77ow

0

正則表達式取決於p如果您嘗試確定特定的長度,那麼您可能會失去靈活性,除非您正在檢查更多標準化輸入,例如日期:\d{2}/\d{2}/\d{4})。 但類似的:

[a-z]+(-[a-z]+)* 

可能會給你一個你的問題的想法。