Tekst scheiden door puntjes

Status
Niet open voor verdere reacties.

maykelvl

Gebruiker
Lid geworden
3 aug 2008
Berichten
13
Hoe kan ik ervoor zorgen dat als iemand in een formulier zijn voorletters intypt, deze automatisch gescheiden worden door puntjes als ze met de cursor in een ander tekstveld staan? Dus als iemand NJH intikt en dan met zijn cursor dit tekstveld verlaat, dan moet automatisch N.J.H. komen te staan.

Heeft iemand hier een goed voorbeeldscript voor?
 
Voor het geval je geen beschikking hebt over PHP (of eigenlijk is javascript in dit geval sowieso handiger) heb ik hier het script nog eens in javascript gezet.

PHP:
<script type="text/javascript">
function splitT(text){
    return ( text.split( '' ) ).join( '.' );
}

function processField(field){
    field.value = splitT(field.value);
}
</script>



En dan zou je het volgende kunnen doen met je formfield:

PHP:
<input type="text" name="initialen" onblur="processField(this)" />
 
Voor het geval je geen beschikking hebt over PHP (of eigenlijk is javascript in dit geval sowieso handiger) heb ik hier het script nog eens in javascript gezet.

Javascript is inderdaad handig, maar kan PHP niet vervangen. Als het belangrijk is dat er altijd puntjes in de database komen (in welk geval je zoiezo PHP of i.d moet hebben) dan moet je altijd met PHP nog je data controleren en verwerken. Javascript werkt namelijk nooit gegarandeerd, PHP wél.

Het is dus best handig om dit met Javascript te doen, maar je moet het daarnaast óók met PHP doen omdat je anders nooit zeker weet dat je data goed is.

Dit gaat overigens fout als er al puntjes in de tekst staan:
Code:
function splitT(text){
    return ( text.split( '' ) ).join( '.' );
}

Eerst alle puntjes verwijderen is één oplossing, maar aangezien daar een regex voor nodig is (global replace) kan het ook meteen met een regex:
Code:
function punt(text)
{
  return text.replace(/([a-zA-Z)(?![.])/g, "$1.");
}

Dit zoekt kort gezegd naar elk teken tussen de a en de z of de A en de Z die niet gevolgd wordt door een punt en vervangt het door hetzelfde maar dan met een punt erachter.

Als je meer tekens wilt scheiden met een punt zoals cijfers, speciale letters als éàü of simpelweg alles (behalve een punt natuurlijk) zeg eht maar dan kan ik de regex veranderen.
 
Bedankt Glest,

Zou je dan misschien de hele code kunnen opschrijven wat ik moet gebruiken? Dus als mensen al puntjes ertussen zetten of ze de letters scheiden met spaties, moet er altijd een puntje tussen komen te staan. Dus als iemand M.V.L intikt, dan moet dit gewoon zo blijven, maar als iemand M V L intikt, dan moet het M.V.L worden.

Hopelijk kan je mij hierbij helpen, of iemand anders natuurlijk :D.
 
Ah ja, spaties erachter, daar had ik nog niet aan gedacht. De functie zelf kan er dan zo uit zien:

Code:
function punt(text)
{
  return text.replace(/([a-zA-Z)[- _+.:]*/g, "$1.");
}
Javascript understeund helaas geen unicode dus voorlopig blijft het bij a tm z en A tm Z. Maar als het belangrijk is kan ik letters als éèËú etc wel toevoegen. In ieder geval, deze functie kun je zo gebruiken:

HTML:
<input type="text" onchange="this.value=punt(this.value);" />

Als je nu het tekstveld verlaat met de cursor worden er puntjes toegevoegd.;)
 
Ik heb die code geprobeerd, maar die doet het helaas niet. Er verandert namelijk niks als ik naar een ander veld ga
 
Je kunt ook:

PHP:
<input type="text" onblur="this.value=punt(this.value);" />
 
Vreemd, onchange zou ook moeten werken. Het is zelfs bedoeld voor het verwerken van veranderde input. Kun je je html bron laten zien als onblur ook niet werkt?
 
Ik heb uitgevonden waarom het scriptje iet werkte. Er was iets niet goed afgesloten, waardoor hij niet werkte. Nu werkt hij helemaal goed :).

Bedankt voor je hulp Glest.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan