简体   繁体   English

无法让正则表达式正常运行

[英]Can't get regex to function correctly

I'm currently doing some custom checkout fields for a customer using Shopify.我目前正在使用 Shopify 为客户执行一些自定义结帐字段。 They have got me to add a VAT field for customers using their EU site which has been working great.他们让我为使用他们的欧盟网站的客户添加增值税字段,该网站一直运行良好。 However, their accounts team is having issues as some customers are entering random data in. So I thought I'd try get some sort of verification system going using regex however I can't seem to get it to work.然而,他们的客户团队遇到了一些问题,因为一些客户正在输入随机数据。所以我想我会尝试使用正则表达式来获得某种验证系统,但我似乎无法让它工作。 Below is my HTML code and the snippet of JS used for this check/error message.下面是我的 HTML 代码和用于此检查/错误消息的 JS 片段。

 // 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>

I believe my regex of ^[a-zA-Z]{2}\\d{9}$/g is correct (2 letters followed by 9 numbers exactly) however I can't seem to find what else I have done wrong.我相信我的^[a-zA-Z]{2}\\d{9}$/g正则表达式是正确的(2 个字母后跟 9 个数字)但是我似乎找不到我做错了什么。 Bear in mind JS is not my strong suit so something may be very wrong.请记住 JS 不是我的强项,所以有些事情可能是非常错误的。
Even if there was a way to modify the String.fromCharCode to only accept 2 letters and 9 numbers but I'm not sure?即使有一种方法可以将String.fromCharCode修改为只接受 2 个字母和 9 个数字,但我不确定?

Any guidance would be appreciated.任何指导将不胜感激。

Use a keyup listener.使用keyup监听器。 You regular expression can be simplified, but basically it's not wrong.你的正则表达式可以简化,但基本上没有错。 Here's a minimal reproducable example you can work with.这是您可以使用的最小可重现示例 It uses event delegation to handle the event.它使用事件委托来处理事件。

 document.addEventListener(`keyup`, handle); function handle(evt) { if (evt.target.id === `demo`) { document.querySelector(`#validate`).textContent = evt.target.value.trim().length < 1 ? `start typing...` : !/^[az]{2}\\d{9}$/i.test(evt.target.value) ? `not ready yet` : `yep, there we are!`; } }
 body { margin: 2rem; font: 12px/15px verdana, arial; }
 <div> <div>We expect 2 characters followed by 9 digits, eg AG120981212.</div> <br><input id="demo"> <span id="validate">start typing&hellip;</span> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM