2015-01-21 76 views
-1

我試圖插入我的(工作)的驗證腳本這段代碼(我曾在網站上找到):檢查特殊字符(;)在驗證一個表單的JavaScript

if (register.username.match(/\W/)) { 
    alert('You have special characters on username field.'); 
    return false; 
} 

它什麼都沒做,也阻止了整個腳本的工作。

這是HTML表單(不是整個事情):

<form name="register" method="POST" action="registar.php" onsubmit="return validateForm();"> 
    <ul class="left-form"> 
     <h2>Nova conta:</h2> 
     <li> 
      <input type="text" name="username" placeholder="Username" required/> 
      <div class="clear"> </div> 
     </li> 
     <li> 
      <input type="text" name="email" placeholder="Email" required/> 
      <div class="clear"> </div> 
     </li> 
     <li> 
      <input type="password" name="pass" placeholder="Password" required/> 
      <div class="clear"> </div> 
     </li> 
     <li> 
      <input type="password" name="pass_confirm" placeholder="Confirmar a password" required/> 
      <div class="clear"> </div> 
     </li> 
     <input type="submit" value="Registar"> 
     <div class="clear"> </div> 
    </ul> 
</form> 

這是我Javscript代碼(沒有特殊字符檢查):

function validateForm() { 
    if (register.username.value.length <= 2) { 
     alert("O username escolhido é demasiado curto."); 
     return false; 
    } 
    if (register.username.value.length > 20) { 
     alert("O username escolhido é demasiado longo."); 
     return false; 
    } 
    var x = register.email.value; 
    var atpos = x.indexOf("@"); 
    var dotpos = x.lastIndexOf("."); 
    if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length) { 
     alert("O email inserido parece ser inválido."); 
     return false; 
    } 
    if (register.username.value == register.pass.value) { 
     alert("Por questões de segurança, pedimos que use uma password diferente do seu nome de utilizador."); 
     return false; 
    } 
    if ((register.pass.value.length < 6) || (register.pass.value.length > 20)) { 
     alert("Certifique-se que a sua password tem entre 6 e 20 letras."); 
     return false; 
    } 
    if (register.pass.value != register.pass_confirm.value) { 
     alert("As passwords não condizem."); 
     return false; 
    } 
    return true; 
} 

忽略警報,因爲它們是隻有顯示消息。

有人可以寫一段代碼來檢查特殊字符(!,。+ *等)或告訴我我使用的代碼有什麼問題嗎?

+0

請顯示錶單和名稱字段的HTML。 – 2015-01-21 11:35:33

+1

如果我的名字中有這些字符會怎麼樣? ==> – 2015-01-21 11:35:49

+1

只需抓住您在網站上找到的隨機腳本並將其應用到您的代碼中,但不理解它所做的並不是成功實現卓越開發的途徑。花一些時間瞭解你工作的語言和環境,並且你可以在睡眠中做出這些改變。在這種情況下,您可能正在尋找[正則表達式](https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions)。 – 2015-01-21 11:37:54

回答

1

你或許應該更改代碼這樣:

if (register.username.value.match(/\W/)) { 
    alert('You have special characters on username field.'); 
    return false; 
} 

有什麼區別?那麼如果你意識到我在中間加入了.value。因爲register.username將引用用戶名輸入元素,並且它沒有match方法。我們需要檢查輸入的文本。通過檢查input element reference,你可以意識到我們使用它的value屬性,它返回輸入的文本。所以register.username.value是由用戶輸入的文本,因爲它是一個字符串,我們可以使用它.match method

您現在可以將任何正則表達式傳遞給符合您需求的匹配方法。還請檢查the guide on regex

也總是檢查顯示在開發者控制檯中的錯誤。

+0

OP,這個工程! – Elric 2015-01-21 12:39:22

+0

謝謝!誠實地說,我沒有注意到缺少'.value',這是一個很大的失敗。 – 2015-01-21 12:42:14