从数组中查找特殊字符

时间:2017-03-08 05:11:50

标签: javascript angularjs string

我正在尝试在用户输入框中编写一个验证,其中允许使用字母数字值以及一些特殊字符。如果用户输入了我的应用程序不支持的特殊字符,我试图显示一条错误消息。

   var inputKey = "abcdfg34$@!"

所以在第一个位置我正在做一个过滤器来从这个字符串中获取特殊的字符

   var inp = inputKey.replace(/[a-zA-Z0-9]/g, ''); // Now ip = @!

$ scope.specialchar包含允许的spl char列表

   $scope.specialchar = [@,#,$,%,<,^,<];

   for(var i in $rootScope.specialChar ){

              if(( inp.indexOf($scope.specialChar[i].value) > -1 ))
                  {
                  $scope.charAllowedText = true;
                  count++;
                  }

          }
         if(count == 0) - display error messagae

因此,如果第一个spl char的出现是未列出的那个,则上面的代码工作正常。以上示例show(!)未列出但由于我的字符串包含@!条件(count == 0)失败。我想再次打印用户在错误提示时输入的特殊字符。

我做错了什么?

3 个答案:

答案 0 :(得分:0)

首先,在设置$scope.specialChar时,数组中的每个字符都应该用引号括起来,以便将其作为字符串读取:

$scope.specialchar = ['@', '#', '$', '%', '<', '^', '<'];

其次,在检查输入是否包含某个特殊字符时,您应该只使用$scope.specialChar[i](不使用.value,因为您尝试仅访问数组中的元素,而不是该元素的value属性。)

inp.indexOf($scope.specialChar[i]) > -1)

答案 1 :(得分:0)

使用此指令代替上面的代码..

angular.module('test')
  .directive('validChar', function() {
    return {
      require: '?ngModel',
      link: function(scope, element, attrs, ngModelCtrl) {
        if(!ngModelCtrl) {
          return;
        }

        ngModelCtrl.$parsers.push(function(val) {
          if (angular.isUndefined(val)) {
            val = '';
          }
          var clean = val.replace( /[a-zA-Z0-9]/g, '');
          if (val !== clean) {
            ngModelCtrl.$setViewValue(clean);
            ngModelCtrl.$render();
          }
          return clean;
        });

        element.bind('keypress', function(event) {
          if(event.keyCode === 32) {
            event.preventDefault();
          }
        });
      }
    };
  });

答案 2 :(得分:0)

正则表达式过滤不允许的字符

var allowed=['-','@'];
var regex=new RegExp('[a-z0-9'+allowed.join('')+']','ig');

var tests=[
  "holi-java",
  "@name",
  "@-#$@"
];


tests.forEach(function(test){
  console.log(JSON.stringify(test)+" disallowed chars were:"+JSON.stringify(test.replace(regex,'')));
});

过滤不允许的字符的Javascript方式

    var allowed=['-','@'];
    

    var tests=[
      "holi-java",
      "@name",
      "@-#$@"
    ];
    function disallowed(input){
       var rest=input.replace(/[a-z0-9]/g,'');
       var disallowed=[]; 
       for(var i in rest){
         if(allowed.indexOf(rest[i])==-1)
          disallowed.push(rest[i]);
       }
       return disallowed;
    }

    tests.forEach(function(test){
      console.log(JSON.stringify(test)+" disallowed chars were:"+JSON.stringify(disallowed(test)));
    });