2014-04-19 350 views
0

我想創建一個註冊表單。當然,每個用戶都必須選擇一個用戶名和一個密碼,但我想,用戶名中只有小字母和數字0-9。 我想使用正則表達式和JavaScript。這裏是代碼:javascript正則表達式不起作用

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
    <meta charset="UTF-8"> 
    <title></title> 
    <script type="text/javascript"> 
    function check(value) { 
     valid_qwe = /[a-z0-9\-]$/; 
     trying = valid_qwe.test(value); 
     alert("The name: " + value + "\nBe allowed: " + trying); 
     return valid_qwe; 
    } 
    </script> 
</head> 
<body> 
    <input type="text" autofocus id="qwe" name="qwe" value="" /> 
    <input type="submit" onClick="check(document.getElementById('qwe').value);" value="Check" id="check" /> 
</body> 
</html> 

但是,當我試圖測試如:蘋果或#蘋果總是寫「真」。

我該怎麼辦?

謝謝!

+0

我想你不想'\ - '號之後,但只有'/ [A-Z0-9] $ /;' –

+3

限制可用於字母表用戶名和密碼是安全失敗。 – Pointy

回答

1

您的Regexp會測試最後一個字符是否在這些限制內,請嘗試使用/^[a-z0-9\-]+$/

1

應該是:

var valid_qwe = /^[a-z0-9-]+$/; 

三個轉變這裏:

  • 圖案本身現在one or more characters of the given range(注意:+量詞括號後);

  • 它固定在字符串的末尾(使用$)和開頭(使用^);

  • 如果它是最後一個或第一個符號,則不需要在字符範圍內轉義-

最後,我寧願看到你的本地化函數中使用的所有變量 - 因此var

0

你的正則表達式是正確的(除了你正在檢查最後一個字符),但你沒有匹配完整的字符串。

+添加到您的正則表達式,這意味着匹配一個或多個以前的標記。

所以,你的正則表達式應該是:

var valid_qwe = /[a-z0-9\-]+/