【问题标题】:How to restrict '♥♣' characters in text box如何限制文本框中的“♥♣”字符
【发布时间】:2010-09-08 10:02:20
【问题描述】:

如何限制“♥♣”之类的字符保存到数据库中。如果这些字符出现在名称文本字段中,则应引发错误消息。 我在 Rails 上使用 ruby​​。

谢谢, 阿努博

【问题讨论】:

  • 您要阻止某些字符(黑名单),还是阻止除特定字符集以外的所有字符(白名单)?
  • 白名单会更好(如果可能的话),因为这样你就不会对你没有想到的事情感到惊讶。 (嗯,你不太可能对他们感到惊讶……)
  • 为什么要这样做?伙计,我讨厌因为某些不可原谅的原因而无法将我的姓氏(带 ä)写入文本框。使用参数化查询来保护自己免受 SQL 注入。
  • 看起来您的问题实际上是不同的:您的数据库配置错误:使用 UTF-8;到处;总是。
  • @Williham:不,有时你想要 UTF-16 :)

标签: mysql html ruby-on-rails


【解决方案1】:

有关仅允许特定字符集(白名单)的示例,请参见此示例,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

【讨论】:

  • +1 以获得良好的 javascript 解决方案。但是,在插入数据库之前还需要检查 RoR。
【解决方案2】:

想要一些 javascript 在用户将此类字符放入表单时告诉他们。您需要在您的 RoR 代码中使用验证例程,以确保只有可接受的字符实际放入数据库中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2016-06-17
    • 1970-01-01
    • 2019-02-23
    • 2010-12-28
    相关资源
    最近更新 更多