2015-05-18 100 views
1

我基本上试图强制一个字段只接受特定的字符串格式。jquery限制接受的字符在字符串中的位置

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

在该当前的示例中,我迫使第一字符是WO,然后在有效字符(有效感数字/字母)加入。

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

+0

你为什么认为你正迫使*杉st *字符是* WC *?您正在删除所有非数字和小写字母。然后,将这个附加到一个“WO”。 –

+0

解释“强迫”......当价值不是你想要的时候,你想要发生什么? – Amit

+0

@stribizhev我道歉,我的意思是WO。这个想法只是在这些特定字母之后附加字母数字字符。 – Jgammel

回答

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

+1

这工作得很好。 我也喜欢它根本不接受不需要的字符 - 简化了错误。 – Jgammel

+0

不是。目前正在使用什么版本?浏览器对网页的要求是什么?你可能会考虑更新。 – demux

1

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

+0

我还在玩这个 - 两个答案都指出我很好奇的语法。谢谢! – Jgammel

+0

如果您发现有用的答案,请考虑upvoting。 –