如何检查两个字符串是否几乎与Angular相等

时间:2018-02-04 18:06:34

标签: javascript angular

我有一个使用Ionic和Angular 4制作的测验应用程序。用户必须提交答案,我会检查它是否与答案相同。 我想检查字符串对应关系,并根据好答案和用户答案之间的对应关系处理事件。

在例如: 如果答案是“azerty”,并且他写了“mzerty”,我想让他继续。 如果用户写了“qwerty”,或者说的东西太不同了,他就会失败。

2 个答案:

答案 0 :(得分:1)

您可以简单地创建一个方法,该方法将返回匹配的字符数。所以根据匹配的字符和字符串的长度,你可以判断天气是否是一个很好的答案。

function checkEq(str1, str2){
        var arr1 = str1.split('');
        var arr2 = str2.split('');
        var counter = 0;
        for(var i=0;i<arr1.length;i++){
            if(arr1[i]==arr2[i]){
                counter++;
            }
        }
        return counter;
    }

答案 1 :(得分:1)

Levenstein距离的简单演示就是这样:

<强>打字稿

import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
import { Observable } from 'rxjs/Observable';
import { map } from 'rxjs/operators';
import levenshtein from 'fast-levenshtein';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
  form: FormGroup;

  score$: Observable<number>;

  constructor(private fb: FormBuilder) { }

  ngOnInit() {
    this.initForm();
    this.initScore();
  }

  private initForm() {
    this.form = this.fb.group({
      str1: '',
      str2: '',
    });
  }

  private initScore() {
    this.score$ = this.form
      .valueChanges
      .pipe(
        map(({str1, str2}) => levenshtein.get(str1, str2))
      );
  }
}

<强> HTML

<form [formGroup]="form">
  <input type="text" formControlName="str1">

  <br>
  <br>

  <input type="text" formControlName="str2">
</form>

<br>

<div>
  Levenshtein score: {{ score$ | async }} 
</div>

Stackblitz现场演示:https://stackblitz.com/edit/angular-usydyu