2016-04-07 16 views
0

Javascript'te bir dizgiye bir yedek maske takmam gerekiyor. Maske şu sözdizimi sahip bir kullanıcı girdidir:javascript'te bir dizedin üzerine karakter değiştirme maskesi

  • '#' girdi dizesindeki aynı konumdaki karakter dokunulmadan bırakılması gerektiğini belirten
  • Başka bir değer gösterir aynı konumdaki karakter giriş dizesinde bu değer ile değiştirilmelidir

Çalıştığını belirten aşağıdaki kodla geldim ama tek bir düzenli ifade veya başka biriyle bunu başarmanın daha iyi bir yolu olup olmadığını merak ediyorum yol (kütüphane yok).

Eğer

var reference = '123-45678-000'; 
var mask ='###W#####-9##'; 
var newReference = mask; 

while ((match = /#{1}/.exec(newReference)) != null) { 
    newReference = newReference.substring(0, match.index) + reference.substring(match.index,match.index+1) + newReference.substring(match.index + 1); 
} 
console.log("old : " + reference);  //prints 123-45678-000 
console.log("mask: " + mask);   //prints ###W######9## 
console.log("new : " + newReference); //prints 123W45678-900 
+0

. '### W ##### - 9 ## 'örnek maskesini kullanarak, giriş olarak sadece 12'yi girersem ne olur? – dman2306

+0

@dman İyi bir nokta. Girdi ve maskenin aynı uzunlukta olmasını sağlayan mantığın (snippet'te gösterilmiyor) olduğunu netleştirmeliydim. –

cevap

1

aşağıdaki deneyin ederiz: uzunlukları uymuyorsa neler yapılmalı

newReference = mask.replace(/#/g,function(m,o) {return reference[o];}); 
+0

Teşekkür ederiz! Daha önce doktoru okudum ama o zamanlar benim için tıklamadım. Ofset özelliğinin güzel kullanımı. Burada bazı referanslar: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace –

1
var reference = '123-45678-000'; 
var mask ='###W#####-9##'; 
var newReference = ""; 

for (var n=0;n<reference.length;n++){ 
    newReference+=(mask.charAt(n) == '#')?reference.charAt(n):mask.charAt(n); 
}