2014-04-06 47 views
0

爲什麼這個字符串這個正則表達式JavaScript的正則表達式中的特殊字符

/^[^-_]*([A-Za-z0-9]{3,})+[-_]?[^-_]*$/i 

比賽?

,abc,,. 

它清楚地說,該字符串應該只包含的

  1. 最少3個字母
  2. 接着任選的 - 或_
  3. 序列號1和2可以重複無限次
  4. 否 - 或_在字符串的開頭或末尾

正則表達式不應該允許任何其他字符比A-z0-9- or _,不過不失,這使他們。

預先感謝

+0

http://regex101.com/ –

+0

'^ [^ -_] *'表示:從'-'和'_'之外的任何字符開始的字符串重複0次或更多次。 – dfsq

+0

您的步驟(1-4)基本上不準確,無法完整描述正則表達式。 – rockerest

回答

5

呃,其實,上面清清楚楚地寫着:

  • -_(與,匹配)的任何字符數
  • 災難性走回頭路發現至少有三個字母數字(匹配abc
  • 可選匹配-_(符合無)
  • 任何數量的不-_(匹配,,.
  • 的字符結束。

您是不是要找:

/^[a-z0-9]{3,}(?:[-_][12]+)?$/i 

修正,我誤解你的 「3點」。

/^[a-z0-9]{3,}(?:[-_][a-z0-9]{3,})*$/i 
+0

謝謝。我看了一下谷歌,但沒有找到'?'的意思。你能向我解釋一下嗎?在此先感謝 – JustBasti

+0

非捕獲子模式。 –

1

[^-_]*指0或多個字符不-_,,,.滿足這一條件。

1

[^-_]*將匹配第一個逗號,([A-Za-z0-9]{3,})+將匹配abc[-_]?將不匹配任何東西,[^-_]*將用最後2個逗號和點。

請注意,使用i標誌可讓您使用([A-Z0-9]{3,})+([a-z0-9]{3,})+以及您當前的正則表達式。


如果你想:

  1. 最少3個字母
  2. 跟着一個可選的 - 或_數1
  3. 順序和可重複2無限次
  4. 否 - 或_在字符串的開頭或末尾

然後我建議:

/^(?:[a-z]{2}[-_]?)+[a-z]$/i 

如果 '信' 你真正想要的字母和數字,那麼我建議:

/^(?:[a-z0-9]{2}[-_]?)+[a-z0-9]$/i 
1
[^-_]* 

不是 「不 - 或者_」,但 「一切比其他 - 或者_」 爲您表達的所有其他部分可能不存在......

[^-_]* 

使您的正則表達式匹配字符串。