2011-04-29 245 views
1

如何確保名稱中除了撇號之外沒有特殊字符...例如: - 我可以允許O'Connor,但不允許John「Doe」?請幫忙。Javascript輸入驗證

+2

People * do *在其名稱中包含重音字符和連字符(例如)。這是一個你應該真正接受自由的領域。 – Quentin 2011-04-29 15:19:01

回答

1

這裏是奠定了你,你會如何使用正則表達式來檢查給定的條件有效名稱的工作例如:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Check for a good name</title> 
    <script> 
    var goodName = /^[A-Za-z'\s]+$/; 

    function checkName(name){ 
     if (goodName.test(name)) { 
      alert("Name is great!"); 
     } else { 
      alert("Name contains illegal characters"); 
     } 
    }  
    </script> 
</head> 
<body> 
    <form onsubmit="return false;"> 
     <input type="text" name="name" size="20"> 
     <input type="button" value="Check" 
          onclick="checkName(this.form.name.value);"> 
    </form> 
</body> 
</html> 

/^[A-Za-z'\s]+$/正則表達式允許大寫英文,小寫英文,撇號,和空間。 (這與Afiefh提出的類似,增加了\ s以允許空格,而+代替*以防止空白名稱通過測試。)

正如David Dorward所建議的,如果您真正使用這個測試的名字,你可能會考慮放寬規則,通過改變線路6本,以適應國際化的名字:

var goodName = /^([ \u00c0-\u01ffa-zA-Z'\-])+$/; 

這使得unicode characters,撇號和連字符。

+0

我剛剛嘗試過您的代碼,但它接受了所有內容...引號和其他特殊字符... – Sapphire 2011-04-29 16:35:57

+0

真的嗎?它對我來說工作得很好。這裏有一個工作版本:http://jsbin.com/ereyi3,這裏是國際正則表達式:http://jsbin.com/uvowe4/ – Nick 2011-04-29 16:49:40

2

使用一個正則表達式,如果你只想要英文字符和撇號使用^[A-Za-z\']*$,你可以擴展它以檢查很多事情。正則表達式是一個非常強大的工具,我會建議他們讀了(他們在幾乎每一個編程語言存在)

var validRegex = /^[A-Za-z\']*$/; 
if(myString.search(validRegex)==-1) 
    alert("Error"); 

編輯:添加例子。

+0

不挑剔,但這是一個連字符不是一個撇號。 – 2011-04-29 15:14:40

+0

糟糕,我的壞。修正中編輯。 – Afiefh 2011-04-29 15:16:20