Jquery 按字符串中的位置限制接受的字符

Jquery limit accepted characters by place in string

我基本上是在尝试强制一个字段只接受特定的字符串格式。

$jq('input#id').bind('keyup', function(){
var sanitized = $jq(this).val().replace(/[^0-9a-z]/g,'');
$jq(this).val('WO'+sanitized);

在当前示例中,我强制第一个字符为 WO,然后添加有效字符(有效为 numbers/letters)。

基于这个想法,我想知道是否有办法执行以下操作:
强制前 5 位只能是数字,后 5 位只能是字母?

如果您需要一个正则表达式来检查前 5 个字符是否为数字,而后五个字符是否为英文字母,您可以使用一个简单的正则表达式:

var re = /^\d{5}.*[a-zA-Z]{5}$/;

^ 将确保我们从字符串的开头开始检查,\d{5} 匹配 5 个数字,.* 匹配除换行符以外的任何字符,[a-zA-Z]{5}正好匹配字符串结尾前的 5 个英文字母 $.

demo

var sanitized = "12345some textqwert";
if (sanitized.match(/^\d{5}.*[a-zA-Z]{5}$/))
  alert("Valid");
else
  alert("Invalid");

sanitized = "1234some textqwert";
if (sanitized.match(/^\d{5}.*[a-zA-Z]{5}$/))
  alert("Valid");
else
  alert("Invalid");

这是一种方法...

$(function() {
  $('input').on('keypress', function(e) {
    var char = String.fromCharCode(e.which);
    var caret = $(this).caret();
    // var caret = this.selectionStart;  // Not supported in IE <= 8 (but who cares...)
    if((caret < 5 && !/^\d$/.test(char)) ||
       (caret >= 5 && !/^[a-zA-Z]$/.test(char))) {e.preventDefault()}
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://apache.hvitahusid.is/jslib/jquery.caret-1.5.2.min.js"></script>

<input type="text" maxlength="10" />