我使用此代码来避免用户连续多次重复一次角色(&#34; bbb&#34;,&#34; ddd&#34;左右......):< / p>
$('.limitRepeaters').keypress(function(){
if (/(.)\1{2,}/.test($(this).val())) {
return false;
}
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="limitRepeaters">
&#13;
现在我希望用户能够重复&#34;期间&#34; charcter三次(...)所以我试过:
$('.limitRepeaters').keypress(function(e){
var code = e.keyCode || e.which;
if ((/(.)\1{2,}/.test($(this).val())) && (code != '190')) {
return false;
}
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="limitRepeaters">
&#13;
但这似乎不起作用。任何想法?
修改
我现在遇到了问题。实际上当用户在写完后写了一封信&#34; ...&#34;没有键入190键代码,因此需要将190键代码添加到正则表达式本身。知道怎么做吗?
答案 0 :(得分:0)
使用您提到的相同的块但具有以下更改。
package package1;
public class Strings {
public static void main(String[]args){
int marker = 0; // changing this to 0
StringBuffer s2 = new StringBuffer();
StringBuffer s = new StringBuffer("AAAA");
for(int i = 0; i<=s.length(); i++){
while(s.charAt(i) == s.charAt(i+1)){
marker++;
}
i += marker;
s2.append(marker + 1); // print out the count plus one because we are counting from zero
s2.append(s.charAt(i));
marker = 0;
}
System.out.println(s2); // It simply prints out nothing
}
}
在上面的代码中,我已经替换了字符串中所有出现的(...)。如果您不希望所有出现都使用$('.limitRepeaters').keypress(function(){
var str = $(this).val();
if (/(.)\1{2,}/.test(str.replace(/[...]/g,''))) {
return false;
}
});
答案 1 :(得分:0)
现在如果得到的是:
$('.limitRepeaters').keypress(function(){
var str = $(this).val();
if (/(.)\1{2,}/.test(str.replace(/[...]/g,'')) || /(.)\1{3,}/.test($(this).val())) {
return false;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="limitRepeaters"/>
这似乎有点长,也会让用户写4次(但那并不坏......)。任何较短的想法都会受到欢迎。
答案 2 :(得分:0)
要测试任何字符是否重复3次或更多次,除.
外,可以使用/([^.])\1{3,}/
。但是,在当前实现中,一旦达到匹配,就不允许退格或其他字符。
另一种方法是重置为keyup中的旧值,虽然这有点'不稳定'(更简化的解决方案是使用光标位置和按键生成预期值,但功能上下面更容易)
var oldValue;
$('.limitRepeaters').keypress(function(e){
oldValue= {val : this.value, pos : this.selectionStart }; //strictly speaking selectionEnd should be kept as well
}).keyup(function(e){
if (/([^.])\1{3,}/.test(this.value)) {
this.value = oldValue.val;
this.selectionStart = oldValue.pos;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="limitRepeaters">
然后,一旦输入三个重复字符,可能阻止所有其他输入是目标,这根本不需要:)。在这种情况下,/([^.])\1{3,}/
可以直接在现有代码中使用。