Javascript regExp输入验证

时间:2017-05-06 11:47:15

标签: javascript jquery regex input

这是我的第一篇文章,我认为答案非常简单,但我不明白:

我(尝试)建立一个shopify商店,但我必须做一些修改,这就是我被卡住的地方:

在我的产品页面上,我希望隐藏<input type=text>,这是必需的,只能是大写字母,长度必须为分钟。是1和最大10.我用html5模式尝试过,但它没有用。我读了一些东西,如果shopify主题包含ajax,它只会忽略模式和必需属性(我不知道这是否属实)。

所以我试着创造自己的功能:

$('#dein-text').on("change textInput input", function(evt) {
    $(this).val(function (_, val) {
        return val.toUpperCase();
    });
});

这应该将字符串返回大写字母。

function checkText() {
    var re = /(?=.*[A-Z]).{1,6}/;
    if(re.test($('#dein-text').val())) {
        $('#problem-bei-input').hide();
        $('.add', $product).removeClass('disabled').removeAttr('disabled');
    } else {       
        $('#problem-bei-input').show();
        $('.add', $product).addClass('disabled').attr('disabled', 'disabled');
    }
}

此函数在输入表单上的每次更改时执行: $('#dein-text').on("change textInput input", checkText);

这不起作用,因为如果有min,它会删除禁用的类。 1个字母(不检查是否有超过6个)以及是否有一个大写字母(类似“HA11”的东西不添加(.disabled)类)。

我希望我可以描述我的问题。

感谢您的帮助!

编辑:这是整个表单的.liquid代码:

https://codepen.io/shawdyy/pen/PmOPWy

(我希望你能在codepen上看到这个,sry我真的对webdev很新了)

2 个答案:

答案 0 :(得分:0)

您可以尝试:

$('#my_id').on("change input", function(evt) {
    $(this).val(function (_, val) {
        return val.toUpperCase().replace(/[^A-Z]/, "").replace(/^([A-Z]{1,10}).*$/g, "$1");
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="my_id">

答案 1 :(得分:0)

要在输入字段中仅允许一到十个大写ASCII字母,请使用以下HTML5模式:

<input type="text" pattern="[A-Z]{1,10}" title="Only 1 to 10 uppercase ASCII letters allowed!">

如果你需要匹配普通JS中只包含1到10个大写ASCII字母的字符串,你需要

 var re = /^[A-Z]{1,10}$/;

请注意,在^属性中使用正则表达式时,HTML5会自动添加开始和结束锚点$ / pattern