如果我启用粘贴,则不会进行验证

时间:2018-01-18 11:21:46

标签: javascript

我试过了,但我无法在粘贴上应用验证:

    function blockSpecialCharacter(event) {
      var regex = new RegExp("^[a-zA-Z0-9]+$");
      var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
      if (!regex.test(key)) {
         event.preventDefault();
         return false;
      }
     $('#businessId').bind('keypress ', function(e) {
                     blockSpecialCharacter(e);
               });

请告诉我如何使用上述验证启用粘贴?

1 个答案:

答案 0 :(得分:0)

您的代码无效的原因有几个:

  • 使用Ctrl + V粘贴不会触发keypress事件
  • 如果有,您将无法使用event.charCode
  • 检索粘贴的数据

所以,我建议你使用不同的事件处理程序,听取paste事件并通过event.originalEvent.clipBoardData

检索数据

这是一个阻止粘贴数据的工作示例,以防它包含至少一个特殊字符。

  
  var regex = new RegExp("^[a-zA-Z0-9]+$");
  function blockSpecialCharacter(event) {
	    
      var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
	  console.log(key);
      if (!regex.test(key)) {
         event.preventDefault();
         return false;
      }
  }
  
  function blockPaste(event) {
	  var pastedData = event.originalEvent.clipboardData.getData('text/plain');
	  
	  if (!regex.test(pastedData)) {
		 console.warn("Pasted data contains some non allowed character");
         event.preventDefault();
         return false;
      }
  }
  
 $('#businessId').bind('keypress', function(e) {
	 blockSpecialCharacter(e);
 });
 
  $('#businessId').bind('paste', function(e) {
	 blockPaste(e);
 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Paste data here : <br/>
<input type="text" name="businessId" id="businessId" value=""/>
<br/><br/>
Text ready to be copied : <br/>
<textarea rows="3" cols="40">
lorem
loreµ</textarea>

`