Soundex

From Rosetta Code
Revision as of 13:04, 12 November 2009 by 12.175.32.19 (talk) (Created page with 'JavaScript var soundex = function (s) { var a = s .substring(1, s.length) .split(''), r = '', codes = { …')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

JavaScript

  var soundex = function (s) {
       var a = s
               .substring(1, s.length)
               .split(),
           r = ,
           codes = {
               a: , e: , i: , o: , u: ,
               b: 1, f: 1, p: 1, v: 1,
               c: 2, g: 2, j: 2, k: 2, q: 2, s: 2, x: 2, z: 2,
               d: 3, t: 3,
               l: 4,
               m: 5, n: 5,
               r: 6
           };
       
       r = s[0].toUpperCase() +
           a
           .filter(function (v, i, a) { return v !== a[i + 1]; })
           .map(function (v, i, a) { return codes[v] }).join();
       
       return (r + '000').slice(0, 4);
   };



VBScript

   Function getCode(c)
       Select Case c
           Case "B", "F", "P", "V"
               getCode = "1"
           Case "C", "G", "J", "K", "Q", "S", "X", "Z"
               getCode = "2"
           Case "D", "T"
               getCode = "3"
           Case "L"
               getCode = "4"
           Case "M", "N"
               getCode = "5"
           Case "R"
               getCode = "6"
       End Select
   End Function
   	
   Function soundex(s)
       Dim code, previous
       code = UCase(Mid(s, 1, 1))
       previous = 7
       For i = 2 to (Len(s) + 1)
           current = getCode(UCase(Mid(s, i, 1)))
           If Len(current) > 0 And current <> previous Then
               code = code & current
           End If
           previous = current
       Next
       soundex = Mid(code, 1, 4)
       If Len(code) < 4 Then
           soundex = soundex & String(4 - Len(code), "0")
       End If
   End Function