2013-02-12 128 views
1

我正在使用以下代碼來測試用戶是否在輸入字段(id ='用戶名')中正確地編寫了用戶名。不幸的是,當使用其他特殊字符時,代碼未能報告錯誤,即使用^,*,+,§等。用於用戶名的jQuery正則表達式不起作用

例如:

米基^

ppppppp§°

micky12-22

它們都通過測試。

不幸的是我花了好幾天,但我沒有解決這個問題。

用戶名的語法是:

  1. 第一個字符=字母
  2. 以下字符=字母或數字或下劃線(_)。 (點) - (短劃線)
  3. 最小長度5個字符
  4. 最大長度20個字符

這是代碼:

> var returncode = true; 
> var userinput = $('#username').val(); 
> var pattern = new RegExp(/^[a-zA-Z]{1}|[a-zA-Z0-9_\.\-]{4, 19}$/); 

> if(!pattern.test(userinput)) {  
>  returncode = false; 
> } 

任何幫助十分讚賞。

謝謝

回答

2
new RegExp(/^[a-zA-Z]{1}|[a-zA-Z0-9_\.\-]{4, 19}$/) 

正則表達式文本已經是一個正則表達式;你不需要再施放它。 {1}是多餘的。 a-zA-Z0-9_也是\w.在字符類中沒有特殊含義,最後-不需要轉義。第一個[a-zA-Z]只能是[a-z]i標誌,反正屬於哪種類型。因此,在那裏:

/^[a-z]|[\w.-]{4,19}$/i 

對實際問題。 ^$都是「或」中的選項,因此任何以一個字母或4到19個字母,數字,下劃線,句點或破折號開頭的用戶名都可以使用。組中間:

/^([a-z]|[\w.-]{4,19})$/i 

...除了根據你的描述,你甚至沒有這個意思嗎?這可能僅僅是:

/^[a-z][\w.-]{4,19}$/i 
+0

謝謝你的詳細解釋,我希望我能知道你對正則表達式的瞭解。順便說一句,它的作品! – user1232551 2013-02-13 04:29:17

0

嘗試:

console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('test')); 
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('1testing')); 
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('testing')); 
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('micky^')); 
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('ppppppp§°')); 
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('micky12-22')); 

http://jsfiddle.net/z5x6k/1/

0

試試這個:

var returncode = true; 
var userinput = $('#username').val(); 
var pattern = new RegExp(/^[a-z][a-z0-9_.-]{4,19}$/); 

if(!pattern.test(userinput)) {  
     returncode = false; 
} 

其中

^[a-z][a-z0-9_.-]{4,19}$ 
    |  |________________Letters, numbers, dot and dash in remaining 
    | 
Letter as start 

這將肯定工作。

+0

謝謝Bhushan。 minitech和你的工作。 – user1232551 2013-02-13 04:30:09