2016-09-28 8 views
0

こんにちは私が持ってフォローコードではJavaScript/jQueryの中の文字列をサニタイズ

HTML:

<div ng-app="myApp" ng-controller="myController"> 
    <input ng-model="value"> 
    <button ng-click="checkValue()">Check value</button> 
</div> 

コントローラー:

angular.module("myApp", []).controller("myController", function($scope) { 
    $scope.value = ''; 

    $scope.acceptedValuesList = { 
    "Items": [{ 
     id: 1, 
     name: 'MI' 
    }, { 
     id: 2, 
     name: 'MO' 
    }, { 
     id: 3, 
     name: 'AB' 
    }] 
    }; 

    $scope.checkValue = function() { 
    if (acceptedValuesList.Items.find((item) => item.text == $scope.value)) { 
     console.log("accepted value"); 
    } else { 
     // SANITIZE VALUE UNTIL IT'S CORRECT 
    } 
    } 
}); 

は私がの1書き込み私の配列( 'MI'、 'MO'または 'AB')に入力されているボタンをクリックすると、th eの文字列を入力し、入力の値が3つの文字列のいずれかと一致する場合は、私のコンソールに小さなメッセージを表示します。これは正常に動作します。だから、別の手紙があれば、私は入力に私の価値を消化したいと思う。たとえば、入力に「ABx」と入力してボタンを押すと、「x」が取り除かれ、入力に「AB」が表示されます。これどうやってするの?私は何かを見つけられなかった、それは私を助けることができた。私はこれが十分明確であることを望む。ありがとう。

EDIT:私自身SOLUTION:

は、これは私のソリューションです:私は私の入力フィールドに値を書き込む:入力値= XY アブ秒;

まず、toUpperCase()を使用して大文字と小文字を区別します。

より私のリストはfind()でループし、現在のループしたアイテムで自分の値を検索します。

$scope.value.toUpperCase(); // $scope.value = 'XYABS' 

let item = $scope.acceptedValuesList.Items.find((item: any) => $scope.value.search(item.name) >= 0); // item = object in the list with id = 3 and name = 'AB' 

その後、アイテムが見つかったかどうかをチェックするので、入力の値は自分のリストのアイテムの1つになります。 substr()より、名前の長さで始まる位置から値の部分文字列を取得します。その後、私は文字列を取得します。何の項目見つけ、私の文字列が間違っているので、私は入力をクリアしなかった場合:

if(item) { 
    $scope.value = $scope.value.substr($scope.value.search(item.name), item.name.length); // $scope.value = 'AB' 
} else { 
    $scope.value = ''; 
} 

これは私のために正常に動作しますが、私はそれが十分に明らかだ願っています。ありがとう。 :)

+3

何がQUWFHUIのような文字列を持っている場合** MO ** Xを比較することができますか?または、より良い:UQHFU ** MI ** ASD ** MO **のような文字列をお持ちの場合はどうなりますか? – Xatenev

+0

@ Xatenevこんにちは、私はそれを非常にうまく説明していませんでした。そして、この3つの文字列を入力することができるはずです。キーボードの 'M'または 'A'を押すと、入力に入力されます。その後、あなたが '私'、 'O'または 'B'を押すと、それも入力に入れなければなりませんが、他のキーをタイプすると入力に入れないでください。間違っている... – MrBuggy

+0

@Xatenevだから、 "MIX"と入力すると、入力に "MI"が表示されます。 「MOR」と入力すると、入力に「MO」が表示されます。 「ABC」と入力すると、入力に「AB」が表示されます。 "WRABC"と入力すると、最初の文字は無視されます。 "AB"は入力になければなりません。また、最後の文字 "C"も無視する必要があります。入力に2文字の文字がある場合よりも、もう一度タイプすることはできないはずですので、 "MO"も無視してください... – MrBuggy

答えて

1

あなたは時計を使用して値

$scope.$watch('value', function(newVal, oldVal) { 
    var newText; 
    if(newVal.indexOf("MI") > 0) { 
    newText = "MI"; 
    } else if(newVal.indexOf("MO") > 0) { 
    newText = "MO"; 
    } else if(newVal.indexOf("AB") > 0) { 
    newText = "AB"; 
    } 
    $scope.value = newText; 
}); 
+0

こんにちは、私の編集した質問を見てください私は自分の解決策を見つけました。 – MrBuggy

+0

ええ、それはかなり簡単です – Anand

+0

ありがとう、歓声:) – MrBuggy

関連する問題