程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 匹配用戶名的正則表達式

匹配用戶名的正則表達式

編輯:C#基礎知識
這個表達式非常簡單,可是在你想為一個站點建立用戶注冊系統的時候確實非常有價值。為了開發上的簡便,我們通常希望把用戶起名字能用的字符限制在一個有限的集合裡(比如一些敏感的字眼或者可能用來做注入攻擊的名字,象delete這種都不能允許),同時我們還要防止有的人惡意冒用別人的用戶名(比如一個用戶叫Bill Gates,另一個人起名叫Bill Gates,區別只是兩個單詞見多了一個空格,當然也可能是換行符這種不可見字符,它們在浏覽器裡面看上去就象同一個人)。

要是不用正則表達式的話,這個檢查會是一個乏味的勞動—先把字符串切割成獨立的單詞,再一個個檢查每個單詞的合法性。如果使用正則表達式,就會變成一個很輕松的事情。首先,讓我們定義我們想接受的用戶名,為了簡單起見,我們的示例被限制為只接受下面的條件:

1. 字母數字字符(英文字母和數字)

2. 下劃線(_)

與此同時,我們還強制用戶名最短3個字符最長不超過16個字符。下面就是符合上述描述條件的正則表達式:
/[a-zA-Z0-9_]{3,16}/

如果你非常熟悉正則表達式的話,你會發現這個表達式好像缺了一些東西。不用著急,接下去我會講到。

如果你讀過我前面一篇正則表達式的入門文章,你可能已經分析出這個表達式如何工作了。首先,我們定義一個字符分類,它將匹配任何字母(a到z以及A到Z)和任何數字(0到9),以及_ (下劃線)字符。下面接著一個數量范圍,它告訴解析引擎我們只接受3到16個之間的字符數量。因為這個數量是指整個字符分類包括的所有字符而不是一個特定的字符,所以這個數量范圍跟在字符分類後面。這個表達式將匹配所有長度在3到16之間,由我們的受限字符集裡面字符構成的字符串。

那麼到底缺了什麼?由於我們寫的表達式是匹配一個字符串的任何部分。它將不止認為‘mike_84′是合法字符串,同樣也會匹配類似‘%! mike_84&’這種包含了我們不希望出現的東西的字符串。我們需要用到行定位點, ^ (caret) 和 $ (dollar) 字符將把我們的表達式限制在一個字符串的起點和終點位置,這樣可以確保整個用戶名符合我們的設定,而不是一部分。

所以修訂版的正則表達式象這樣:
/^[a-zA-Z0-9_]{3,16}$/



匹配用戶名的正則表達式
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved