假设我有以下文字输入:
<input class="required-field" type="text" name="create-user-username" pattern="/^[0-9]+$/" />
我的JS中的某个地方(我想)在我的表格验证中使用以下片段:
$('.required-field').each(function() {
var inputVal = $(this).val();
var pattern = $(this).attr('pattern');
if (pattern !== 'undefined') {
if (inputVal.match(pattern)) {
alert('Input is not valid');
}
}
});
然而,这场比赛没有奏效,我找不到合适的解决方案......
表单由用户逐步完成,每个页面都经过验证,然后才能进入下一步。这就是为什么我不使用jQuery .validate ....
答案 0 :(得分:3)
您缺少一个括号。
if (inputVal.match(pattern)) // <-- this one
正如@Christoph提到的那样,您尝试与string
进行匹配,并且可以使用.replace()
方法移除外部/ /
,或者在输入中更改您的模式元素本身是:
input pattern="^[0-9]+$"
将您的模式变量更改为:
var pattern = new RegExp($(this).attr('pattern')); // now it'll all work
另外,请务必检查您的控制台日志(您会看到典型的Uncaught SyntaxError: Unexpected token {
同样在检查undefined时,最好的方法是:
typeof(pattern)
!== 'undefined'
答案 1 :(得分:2)
pattern
是一个字符串,因此需要:
$(this).attr('pattern').replace(/\//g,"");
if (!inputVal.match(new RegExp(pattern))) { // also you missed a ! for negation
另外,使用
if (!pattern) // uses falsyness of "undefined" - also catches the empty string
// or
if ( typeof pattern !== "undefined")
并修复不匹配的问题:if (inputVal.match(pattern) // <- missing )
答案 2 :(得分:0)
目前您的模式是字符串,您需要使用new RegExp()
转换为真实的模式。
同时从/
中删除pattern="/^[0-9]+$/"
的斜杠new RegExp()
,因为<input class="required-field" type="text" name="create-user-username" pattern="^[0-9]+$" value=""/>
$('.required-field').each(function() {
var inputVal = $(this).val();
var pattern = $(this).attr('pattern');
if (pattern != 'undefined') {
pattern = new RegExp(pattern)
if (inputVal.match(pattern)){
alert('Input is not valid');
}
}
});
会自动添加斜杠。
参见代码
{{1}}