我的Angular应用中有一个自定义directive
用于表单验证。我有一个电话input
,它只接受数字值,为此我创建了一个`regExp':
var regExp = /^[0-9\s\w\+\-\(\)\']*$/;
然后我在一个函数中使用了这样的函数:
.directive('validatePhone', function(){
var regExp = /^[0-9\s\w\+\-\(\)\']*$/;
return {
require: 'ngModel',
link: function(scope, elem, attr, ctrl) {
function myValidation(value) {
if (regExp.test(value)) {
ctrl.$setValidity('validPhone', true);
} else {
ctrl.$setValidity('validPhone', false);
}
return value;
}
ctrl.$parsers.push(myValidation);
}
}
})
如果我输入任何特殊字符,例如$%!
,它会在前端出现错误,因此有效。由于某种原因,它仍然接受alpha值。然后,只有当input
值不包含alpha值时,我才会将条件扩展为true,如下所示:
.directive('validatePhone', function(){
var regExp = /^[0-9\s\w\+\-\(\)\']*$/;
var regExc = /^[a-zA-Z]+$/; //new reg exp
return {
require: 'ngModel',
link: function(scope, elem, attr, ctrl) {
function myValidation(value) {
if ((regExp.test(value)) && (!regExc.test(value))) {
ctrl.$setValidity('validPhone', true);
} else {
ctrl.$setValidity('validPhone', false);
}
return value;
}
ctrl.$parsers.push(myValidation);
}
}
})
如果我在开头输入alpha值,则将验证标记为false。但是如果我输入数字然后输入alpha值,它将返回true 0178ar
,这不是我想要的。
问题
为什么我的验证允许输入字母字符时,我指定它不是?
答案 0 :(得分:3)
\w
允许在RegExp中使用单词(字母数字和下划线组合)。
答案 1 :(得分:2)
您的原始正则表达式export function profileDropdownEpic (action$, { getState, dispatch }{
return action$.ofType('SET_SELECTED_ITEM')
.mapTo(() => {
const selectedItem = getState().listDropdown.get('SelectedItem')
if (selectedItem === 'logout') {
history.push('/login')
}
return {}
})
}
包含/^[0-9\s\w\+\-\(\)\']*$/
,其转换为“任何单词字符”,其中包括但不限于\w
。
从正则表达式中删除它,它应该按预期工作,即
[a-zA-Z]