2015-05-04 12 views
0

我試圖建立一些正則表達式,可以檢測到有人試圖用點「填寫」他們的用戶名。正則表達式來檢測填充字符長度與週期

還有一些其他要求:

  • 用戶名只能包含字母,數字和點
  • 用戶名必須啓動並以字母或數字
  • 結束,但不超過一個連續的點
  • 最小的6個字符(字母和數字)

例如:

  • abcde6被允許(沒有抓到),因爲它有6個字符
  • abcd5不是(被抓),因爲它不具備的前提6個字符

說我的方式構建正則表達式是,如果有匹配,它將拒絕允許的用戶名。

什麼我迄今是:

/[^a-z0-9.]|^\.|\.$|\.{2,}|\S{31,}|^\S{0,5}$/i 

這捕獲:

  • 不屬於字母,數字的任何字符,點
  • 不能以點開始
  • 不能以點結束
  • 不能有2個或更多個連續點
  • 不能有31個或更多字符
  • 不能有5點或更少的字符

我試過幾十種不同的方式來獲得的地方,最後檢查,但他們都要麼打破整個檢查,包括允許(abcde6)或只是沒有工作。

,我已經最接近與一個是:

(\.{1}[a-z0-9]{1,}){1,3}\S{1,}$ 

這裏的問題是,它也趕上123.456(這應該被允許/抓不到)字符串的其他

例子它應該抓住:

  • asdf.g
  • a.sdfg
  • a.sdf.g
  • as.df.g

我試圖做到這一點只用正則表達式,而無需預先格式化使用JS吧。

+0

'.length'屬性是否足夠?它應該讓你的表情更加複雜。 – npinti

+0

試圖在'\。\。'上匹配時是否有問題? – Bohemian

+0

如何使用*匹配*正則表達式並檢查不匹配:http://jsfiddle.net/ew88c8wt/2/?在regex101.com的正則表達式:https://regex101.com/r/qS7mY5/1 –

回答

0

好吧,經過多次實驗,我已經找到了答案。事實證明,發現未經許可的字符串實際上是更容易(我反正):

/^(\w\.?){4}\w$/ 

相同的表達擴展:

/^\w\.?\w\.?\w\.?\w\.?\w$/ 

這將捕獲任何填充只有5個或更少的字符並穿插點。

,我使用的完整的regex還捕捉:

的31個或更多個字符(字母數字和週期)
  • 字符串。
  • 任何非字母數字和句點的字符。
  • 任何字符串開頭一段
  • 任何一個時期
  • 有2個或更多的連續週期
  • 和一個新來者到列表中的字符串結尾的字符串:有8個以上的任意字符串沒有任何字母的數字。

    /^(\w\.?){4}\w$|^\w{0,5}$|\w{31,}|[^a-z0-9.]|^\.|\.$|\.{2,}|\d{8,}/i 
    

我所有,我可以regex101這裏想到的可能組合測試這一點:https://regex101.com/r/xI7wZ3/1 和它的作品! (yay)

相關問題