验证功能不应该接受字母字符

时间:2017-11-29 09:21:47

标签: javascript angularjs regex

我的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,这不是我想要的。

问题

为什么我的验证允许输入字母字符时,我指定它不是?

2 个答案:

答案 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]