note 33435 added to function.soundex
| From: | php dot net at rack1 dot php dot net | Date: | Wed, 25 Jun 2003 22:01:44 +0000 |
| Subject: | note 33435 added to function.soundex | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-51012@lists.php.net to get a copy of this message | ||
Ik made the Soundex in JavaScript.
http://www.vanderharg.nl/soundex.php
Explanation of the algoritm is on the above page.
It returns two values if a name has "van der" or something alike in it. One with that in
the Soundex test and one without.
The use of regular expressions makes the ectual soundex algoritm short. Two conditions of the
algoritm I did remove because in this implementation they are redundant.
<script language="javascript">
var koppelteken = ""; // kan ook - zijn.
var vv=new Array(
"de la ",
"in het ",
"in 't ",
"op den ",
"op het ",
"op de ",
"op te ",
"op 't ",
"up te",
"uit de ",
"van den ",
"van der ",
"van het ",
"van de ",
"van 't ",
"opte ",
"upte ",
"con ",
"den ",
"der ",
"ten ",
"ter ",
"van ",
"de ",
"di ",
"du ",
"la ",
"le ",
"te ",
"vd ",
"l' ",
"l'",
"'t ");
function removePrefix(name)
{
i=0;
var strippedresult = "";
while ((strippedresult=="")&&(i<vv.length))
{
if (name.substr(0,vv[i].length)==vv[i].toUpperCase())
strippedresult = name.substr(vv[i].length);
i++;
}
return strippedresult;
}
function Soundex(name)
{
if (name.length>1)
{
// zet om naar hoofdletters.
name=name.toUpperCase();
// converteer leestekens
re = new RegExp ('[ÄÀÁÃ]+', 'gi');
name = name.replace(re, 'A');
re = new RegExp ('[ËÈÉ]+', 'gi');
name = name.replace(re, 'E');
re = new RegExp ('[ÏÌÍ]+', 'gi');
name = name.replace(re, 'I');
re = new RegExp ('[ÖÒÓÕ]+', 'gi');
name = name.replace(re, 'O');
re = new RegExp ('[ÜÙÚ]+', 'gi');
name = name.replace(re, 'U');
re = new RegExp ('[Ý]+', 'gi');
name = name.replace(re, 'Y');
// behandel voorvoegsels
var result=Soundex(removePrefix(name));
if (result!="") result+="\n";
// eerste letter
result += name.substr(0,1);
// codeer de rest in cijfers
name=name.substr(1);
// haal A, E, I, O, U, H, W, en Y er uit.
re = new RegExp ('[AEIOUHWY ]+', 'gi');
name = name.replace(re, '');
// Zet om naar cijfers met tabel.
// haal dubbele cijfers er uit.
re = new RegExp ('[BFPV]+', 'gi');
name = name.replace(re, '1');
re = new RegExp ('[ÇCGJKQSXZ]+', 'gi');
name = name.replace(re, '2');
re = new RegExp ('[DT]+', 'gi');
name = name.replace(re, '3');
re = new RegExp ('[L]+', 'gi');
name = name.replace(re, '4');
re = new RegExp ('[MN]+', 'gi');
name = name.replace(re, '5');
re = new RegExp ('[R]+', 'gi');
name = name.replace(re, '6');
// vul aan tot 3 cijfers.
while (name.length<3)
name += "0";
// kap af op 3 cijfers
if (name.length>3)
name=name.substr(0,3);
return result+koppelteken+name;
}
else return "";
}
</script>
----
Manual Page -- http://www.php.net/manual/en/function.soundex.php
Edit Note -- http://master.php.net/manage/user-notes.php?action=edit+33435
Delete Note -- http://master.php.net/manage/user-notes.php?action=delete+33435&report=yes
Reject Note -- http://master.php.net/manage/user-notes.php?action=reject+33435&report=yes