代码之家  ›  专栏  ›  技术社区  ›  Dan

Typescript:如何制作数组.indexOf不区分大小写的搜索

  •  -1
  • Dan  · 技术社区  · 6 年前

    forbiddenNames 方法)仅适用于区分大小写的。但我也想让它对大小写不敏感。如何让它工作?

    例如。 forbiddenUsernames


    模板:

    <input type="text" id="username" class="form-control" formControlName="username">
    

     forbiddenUsernames = ['Chris', 'Ashutosh'];
    
    
      ngOnInit() {
        this.signupForm = new FormGroup({
            'username': new FormControl(null, [Validators.required, this.forbiddenNames.bind(this)]) 
        });
      }
    
    
    // validator is just a function, its our own validator
      forbiddenNames(control: FormControl): {[s: string]: boolean} {
        if (this.forbiddenUsernames.indexOf(control.value)  !== -1 ) { //  "-1" -  did not find a match
          return { 'nameIsForbidden' : true };
        }
      }
    

    区分大小写

    Case sensitive case

    Case In-sensitive case
    

    Case In-sensitive case 请让我知道如果问题不清楚,我会解释你

    1 回复  |  直到 6 年前
        1
  •  3
  •   SiddAjmera    6 年前

    你应该考虑让禁止使用的名字完全大写或完全小写。然后做必要的比较;

    比如:

    forbiddenUsernames = ['chris', 'ashutosh'];
    
    
    ngOnInit() {
      this.signupForm = new FormGroup({
        'username': new FormControl(null, [Validators.required, this.forbiddenNames.bind(this)])
      });
    }
    
    
    // validator is just a function, its our own validator
    forbiddenNames(control: FormControl): {
      [s: string]: boolean
    } {
      if (control.value && this.forbiddenUsernames.indexOf(control.value.toLowerCase()) !== -1) { //  "-1" -  did not find a match
        return {
          'nameIsForbidden': true
        };
      }
    }
    

    如果您的禁止姓名列表来自数据库,您只需在列表上应用一个映射即可获得小写列表。

    forbiddenNames = [
      'John',
      'JANE',
      'jacob',
      'SaM',
      'JeReMy',
      'sIdDhArTh'
    ];
    
    forbiddenNames.map(name => name.toLowerCase());
    
    推荐文章