我使用Javascript来验证模式,我基本上只想允许字母数字值和标点符号。奇怪的是,当我输入一个(或一个)后紧接着它失败的东西,但是如果我给它一个空间就可以了。我做错了什么?
$(document).on('blur', '#comment', function () {
var rgx = /[A-Za-z0-9 _.,!"']$/;
var value = $(this).val();
if (!rgx.test(value) == true){
$("#comment").focus();
$("#commentError").val("Please use only alphabets, numbers and punctuations");
}else{
$("#commentError").val("");
}
});
测试案例:
传递
Input: ( a
失败
Input: (a
答案 0 :(得分:1)
您当前的模式仅检查字符串中的最后一个字符。
您需要有一个检查整个字符串的模式。这可以通过使用^
和$
锚点以及使用一个或多个量词*
来实现(假设评论是可选的)。
你的正则表达式可以是:
/^[\w .,!"']*$/
或/^[A-Z0-9 _.,!"']*$/i
或/^[u20-u22u27u2Cu2Eu30-u39u41-u5Au5F]*$/i
第一个是最简短的(我的偏好),第二个可能是最可读的,第三个是使用unicode并且是最难理解的。一切都会很快,所以速度并不是真正的标准。
这是JSFiddle Demo,其中包含一些改进和评论建议。
HTML:
<input id="comment" name="comment" value="( a">
<i> press tab to trigger validation</i><br>
<input id="commentError" value="Comment Limit: 25. Use only letters, numbers, and punctuation.">
<!-- I have added "?" to your regex pattern because it seems permissible. -->
<!-- Invalid values: "(a", "( a", "12345678901234567890123456" -->
<!-- Valid values: "", "Hello World", "l0ts, "of go.od' st_uff!?" -->
<!-- Additional advice: if you are storing the input value in a database table,
you should limit the field length to what the table column can hold.
If, per se, you are saving as VARCHAR(255), then set the #comment field limit
as 255 so that the value isn't truncated during saving. -->
CSS:
#comment{
width:200px;
}
#commentError{
display:none;
width:400px;
}
JS:
$(document).on('blur','#comment',function(){
// no variable declaration needed
if(/^[\w .,!"'?]{0,25}$/.test($(this).val())){ // contains only valid chars w/ limit
$("#commentError").hide();
}else{
$("#comment").focus(); // disallows focus on any other field
$("#commentError").show();
}
});
答案 1 :(得分:0)
以下是如何解决您的问题 - 存在一些差异,但您应该可以将其复制粘贴到您的代码中。
JSfiddle:https://jsfiddle.net/pg792z79/
<script>
var str = "apples" // <-- this is your input string
var patt = new RegExp('[A-Za-z0-9 _.,!"\'/$]*');
if(patt.test(str)) {
//success
$("#commentError").val("");
} else {
//error - did not match regex
$("#comment").focus();
$("#commentError").val("Please use only alphabets, numbers and punctuations");
}
</script>
答案 2 :(得分:-1)
/^[A-Za-z0-9 _.,!"']$/g
;那就是它。