[JS] Functie om needles te vinden in haystack

Pagina: 1
Acties:

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik probeer een functie te maken die de inhoud van een textarea controleert op een aantal waarden zie erin moeten zitten. Uiteindelijk zal ik dus de haystack (textarea.value) doorzoeken op een aantal needles (opgesomd in een array). Zover ben ik nog niet: ik heb een probleem met het zoeken naar een exacte string.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script>
function check_tpl()
{
  var haystack = document.getElementById('tpl').value;
  var needle   = 'een';
  var k        = needle.length;

  //if (haystack.substr(0,k) == needle)
  if (haystack.indexOf(needle) != -1)
    alert('needle gevonden in haystack!');
}

</script>
<form>
  <textarea id="tpl">Dit is een string</textarea>
  <input type="button" onclick="check_tpl()" value="check template">
</form>

Hierboven zoek ik dus of de string "een" voorkomt in de textarea. De eerste manier die ik bedacht (nu uitgecomment) werkte niet - weet nog niet waarom. De tweede manier werkt wel - "een" wordt gevonden. Probleem is: als ik de value van de textarea verander in "Dit is eene string", dan zegt 'ie ook "een" gevonden te hebben - als deel van eene natuurlijk. Ik wil echter alleen zoeken of de exacte waarde van needle gevonden wordt. Een soort PHP strstr()-kloon eigenlijk. Wie helpt mij op weg?

P.S. Wat nadere uitleg: ik ben bezig met het maken van een stukje weblog software (in PHP), waar ik in een textarea de layout kan aanpassen. PHP vervangt een aantal template {tokens} door de goede content, zoals {footer} door "copyright blablabla ...". Als ik het template heb aangepast, wil ik voordat het verzonden wordt, controleren of een aantal essentiele tokens ({body}, {footer}, {login}, etc...) toch wel in de template staan om latere fouten bij het renderen van de site te voorkomen.

[ Voor 68% gewijzigd door Reveller op 28-12-2004 00:33 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Verwijderd

"eene" bevat toch ook de string "een" dus wat is je probleem? Ten eerste is er natuurlijk weer het probleem dat je het probleem niet duidelijk weet te omschrijven, dus gaan we maar weer gokken. Wil je alléén zoeken naar hele woorden? In dat geval kun je het best een regular expression maken (RegExp) van een word-boundary (\b), je woord en nogmaals een word-boundary.

Verwijderd

dus zeg maar:
JavaScript:
1
2
var foo = new RegExp("\b"+needle+"\b","g");
if (foo.test(haystack)) alert('bar');


/voorkauwmodus

http://www.devguru.com/Te...ript/quickref/regexp.html

[ Voor 35% gewijzigd door Verwijderd op 28-12-2004 11:53 ]