【问题标题】:Jquery limit accepted characters by place in stringJquery在字符串中按位置限制接受的字符
【发布时间】:2015-05-18 21:36:04
【问题描述】:

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

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

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

基于这个想法,我想知道是否有办法做到以下几点:
强制前 5 位只能是数字,后 5 位只能是字母?

【问题讨论】:

  • 为什么你认为你将第一个字符强制为WC?您正在删除所有非数字和小写字母。然后,将其附加到 WO
  • 解释“强制”...当值不是您想要的值时,您希望发生什么?
  • @stribizhev 抱歉,我的意思是 WO。想法只是在这些特定字母之后附加字母数字字符。
  • @Amit 我在想只显示一个简单的错误/提示或清除该字段就可以了。

标签: jquery regex text field


【解决方案1】:

这是一种方法...

$(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" />

【讨论】:

  • 这很好用。我也喜欢它根本不接受不需要的字符 - 简化了错误。
  • 没有。当前使用的是什么版本?网页的浏览器要求是什么?您可能会考虑更新。
【解决方案2】:

如果你需要一个正则表达式来检查前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");

【讨论】:

  • 我还在玩这个——两个答案都指出了我很好奇的语法。谢谢!
  • 如果您觉得答案有用,请考虑点赞。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多