【发布时间】:2021-10-30 11:49:31
【问题描述】:
我目前正在为使用 Shopify 的客户做一些自定义结帐字段。他们让我为使用其欧盟网站的客户添加增值税字段,该网站运行良好。但是,他们的客户团队遇到了一些问题,因为一些客户正在输入随机数据。所以我想我会尝试使用正则表达式来建立某种验证系统,但我似乎无法让它工作。 下面是我的 HTML 代码和用于此检查/错误消息的 JS 的 sn-p。
// VAT Field Checks
$("#checkout_vat_number").on("keypress", function(evt) {
var theEvent = evt || window.event;
var len_val = $(this).val().length;
if (theEvent.type === 'paste') {
key = event.clipboardData.getData('text/plain');
} else {
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode(keyCode);
}
if(len_val < 11){
var regex = /^[a-zA-Z]{2}\d{9}$/g; //Checks to make sure code is 2 letters and then 9 numbers
if( !regex.test (key) ) {
$("#error-for-vat-text").show();
$("#error-for-vat-text").text("Please add your 2 digit country code and 9 digit tax number");
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
} else {
$("#error-for-vat-text").hide();
$("#error-for-vat-text").text("");
}
} else {
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
}
});
<div id="checkout_vat">
<p class="section__text">Fill out your VAT number including 2 digit country code and 9 numbers, excluding any special characters.</p>
<div class="fieldset" id="vat">
<div data-address-field="vat" id="vat_field" class="field field--required">
<div class="field__input-wrapper field__input-wrapper--icon-right"><label class="field__label field__label--visible" for="checkout_vat_number">VAT Number</label>
<input placeholder="VAT Number" autocomplete="vat number" autocorrect="off" class="field__input field__input--numeric" aria-describedby="error-for-vat" aria-invalid="true" aria-required="true" size="30" type="text" value="" pattern=".{11,11}" name="checkout[attributes][VAT Number]"
id="checkout_vat_number">
<input type="hidden" name="checkout[attributes][Agreed that responsible for any import duties/taxes and/or associated costs incurred.]" value="" id="checkout_duties_taxes_input">
</div>
</div>
<p class="field__message field__message--error" id="error-for-vat-text"></p>
<p class="field__message field__message--error" id="error-for-vat" style="display:none;">Enter a VAT number</p>
</div>
</div>
我相信我的 ^[a-zA-Z]{2}\d{9}$/g 正则表达式是正确的(2 个字母后跟 9 个数字)但是我似乎找不到我做错了什么。请记住,JS 不是我的强项,所以可能会有很大的问题。
即使有办法将String.fromCharCode 修改为只接受2 个字母和9 个数字但我不确定?
任何指导将不胜感激。
【问题讨论】:
-
它说
keyCode没有定义。此外,问题在于您正在尝试将当前按下的 (single) 键与预期匹配 11 个字符的字符串的/^[a-zA-Z]{2}\d{9}$/模式匹配。 -
我该如何解决这个问题?老实说,我有点迷茫,过去 2 小时一直盯着它看。
-
不知道您的期望是什么。搜索“使用正则表达式 jquery 进行实时输入验证”或类似的内容。
-
检查了正则表达式,它似乎工作。至少代码 sn-p $("#error-for-vat-text").html("...") 给了我错误“Uncaught TypeError: $(...).html is not a function”你可以使用 $("#error-for-vat-text").innerHTML = "..."
标签: javascript regex shopify