2010-09-08 63 views
3

如何限制“♥♣”像保存到数据库中的字符。如果这些字符出现在名称文本字段中,则应该抛出错误消息。 我在轨道上使用红宝石。如何在文本框中限制“♥♣”字符

感谢, Anubhaw

+0

你要防止某些字符(黑名单),或防止一切,但一组特定的字符(白名单)? – aularon 2010-09-08 10:09:18

+0

白名单更好(如果可能的话),因为那样你就不会对你没有想到的事情感到惊讶。 (好吧,你不太可能会为他们感到惊讶......) – 2010-09-08 10:10:37

+0

其实我想限制名字如'♥♣name♣♥'这个。在数据库中跟随♣♥的值是¥£。那么,我如何限制以下几点,看起来都一样。 – Anubhaw 2010-09-08 10:19:01

回答

6

仅允许一个特定的字符集(白名单),其IMO是一个例子见这更好的和更安全的:

var allowed = /[a-ZA-Z0-9]/; // etc. 

window.onload = function() { 
    var input = document.getElementById("test"); 

    input.onkeypress = function() { 
     // Cross-browser 
     var evt = arguments[0] || event; 
     var char = String.fromCharCode(evt.which || evt.keyCode); 

     // Is the key allowed? 
     if (!allowed.test(char)) { 
      // Cancel the original event 
      evt.cancelBubble = true; 
      return false; 
     } 
    } 
}; 

来自: prevent typing non ascii characters in a textbox

可替换地可以使用正则表达式来剥离非ASCII字符。

在这里看到:How to remove all non - ASCII characters from a string in Ruby

+2

+1为良好的JavaScript解决方案。然而,在插入数据库之前还需要检查RoR。 – Thomas 2010-09-08 10:18:28

1

一些JavaScript当他们把这些字符的形式告知用户。您需要需要您的RoR代码中的验证例程,以确保只有可接受的字符实际放置在数据库中。