JavaScript: Byta ut "konstiga" bindestreck

Tråden skapades och har fått 16 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • International user
  • 2008-02-18 10:20

Jag behöver byta ut två speciella tecken i ett webformulär med hjälp av JavaScript. Dessa tecken är

'–' (alt -)
'—' (shift alt -)

Dessa ska bytas ut mot ett vanligt bindestreck (minustecken). Problemet är att tecknen inte går att byta ut med JavaScript. Scriptet verkar inte känna igen dessa tecken och de ignoreras när jag försöker byta ut dessa. Nedan har jag ett enkelt testformulär med koden som utför bytet. Vad kan deta vara för fel?

<html>
<head>
<script>

function f1()
{

var1=document.test.text1.value;

var2 = var1.replace(/—/g, "x");
var3 = var2.replace(/–/g, "y");
//Referens med vanligt bidestreck.
var4 = var3.replace(/-/g, "z");
document.test.resultat.value=var4;

}

</script>
</head>
<body>

<form name="test">
text1 <input type="text" name="text1" value="">
<br>
resultat <input type="text" name="resultat" value="">
<br>
<input type="button" value="Utför" OnClick="return f1();">

</body>
</html>
  • Medlem
  • Gävle
  • 2008-02-18 10:50

Förmodligen så har inte RegEx stöd för precis alla tecken i precis alla teckenkodningar.

Lösning: ange det tecken du vill has ANSI eller ASCII-kod. ANSI-koden för det långa bindestrecket är 97, alltså anger du detta som regex: /\x97/

Funkar det inte så bör du kolla upp vilken character encoding som html-dokumentet använder, och kolla om det fungerar bättre om du byter till Latin-1.

Fullständig lista över ANSI-tecken och deras hexadecimala koder: http://www.handheld-basic.com/documentation/text/page_599.html

  • Medlem
  • International user
  • 2008-02-18 13:24
Ursprungligen av Jogin:

Förmodligen så har inte RegEx stöd för precis alla tecken i precis alla teckenkodningar.

Lösning: ange det tecken du vill has ANSI eller ASCII-kod. ANSI-koden för det långa bindestrecket är 97, alltså anger du detta som regex: /\x97/

Funkar det inte så bör du kolla upp vilken character encoding som html-dokumentet använder, och kolla om det fungerar bättre om du byter till Latin-1.

Fullständig lista över ANSI-tecken och deras hexadecimala koder: http://www.handheld-basic.com/documentation/text/page_599.html

Jag har testat med olika character encoding (utf-8, latin-1 och iso-8859-1) men det blir ingen skillnad. ANSI-kod funger inte det heller. Mycket märkligt att man inte ska kunna fånga upp dessa tecken.

  • Medlem
  • Mölndal
  • 2008-02-18 12:37

Behöver du göra regex-replace alls förresten? Går det lika dåligt med
var2 = var1.replace("—", "x");
?

  • Medlem
  • International user
  • 2008-02-18 13:08
Ursprungligen av memark:

Behöver du göra regex-replace alls förresten? Går det lika dåligt med
var2 = var1.replace("—", "x");
?

Ingen skillnad, fungerar inte.

  • Medlem
  • Göteborg
  • 2008-02-18 13:23

Finns det någon speciell anledning till att du måste göra det med javascript? Låter som en tveksam lösning om du frågar mig. Har du något scriptspråk på serversidan som tar emot formuläret? Jag hade nog överlåtit problemet dit. Exempelvis PHP har många fina verktyg som hade ordnat det där.

Varför behöver du byta ut tecknen? Lättare att hjälpa om man vet

  • Medlem
  • International user
  • 2008-02-18 13:27
Ursprungligen av xevve:

Finns det någon speciell anledning till att du måste göra det med javascript? Låter som en tveksam lösning om du frågar mig. Har du något scriptspråk på serversidan som tar emot formuläret? Jag hade nog överlåtit problemet dit. Exempelvis PHP har många fina verktyg som hade ordnat det där.

Varför behöver du byta ut tecknen? Lättare att hjälpa om man vet

Ingen speciell anledning. Tråden fokuserar på att fånga dessa tecken med JavaScript.

  • Medlem
  • Mölndal
  • 2008-02-18 16:56
Ursprungligen av Wire:

Ingen speciell anledning. Tråden fokuserar på att fånga dessa tecken med JavaScript.

Det var väl ett rätt tråkigt svar till nån som försöker hjälpa dig. Tråden fokuserar på att lösa ditt problem där det ingår att du "behöver" byta ut dem med JavaScript. Xevve vill förstå hela problemet. Är det hemligt varför du måste göra som du gör?

  • Medlem
  • International user
  • 2008-02-18 17:03
Ursprungligen av memark:

Det var väl ett rätt tråkigt svar till nån som försöker hjälpa dig. Tråden fokuserar på att lösa ditt problem där det ingår att du "behöver" byta ut dem med JavaScript. Xevve vill förstå hela problemet. Är det hemligt varför du måste göra som du gör?

Märkligt inlägg. Tråden handlar om att trolla med dessa tecken i JavaScript. Inget annat. Vad är det som är konstigt med att en tråd håller sig till grundfrågeställningen?

  • Medlem
  • Göteborg
  • 2008-02-18 13:29

Ok. Då har jag inte mycket att komma med.

  • Medlem
  • 2008-02-18 15:27

Hm, ditt skript fungerar utmärkt för mig när jag kör i Safari 2 med UTF8...

För säkerhets skull, välj "visa källa" på sidan i din webbläsare och försäkra dig om att tecknen tolkas som de ska av läsaren. Om du inte redan gjort det...

lägg in korrekt teckenkodning i huvudet

<meta http-equiv="content-type" content="text/html; charset=utf-8">
  • Medlem
  • International user
  • 2008-02-18 16:14
Ursprungligen av Richard Rönnbäck:

lägg in korrekt teckenkodning i huvudet

<meta http-equiv="content-type" content="text/html; charset=utf-8">

Det hjälper inte.

Ursprungligen av Wire:

Det hjälper inte.

Det hjälper hos mig

  • Medlem
  • International user
  • 2008-02-18 17:46
Ursprungligen av Richard Rönnbäck:

Det hjälper hos mig

Richard, det är inte så att din webbläsare står inställd på "Teckenkodning -> Västerländsk (Mac OS Roman)"? Då fungerar det även för mig.

  • Medlem
  • International user
  • 2008-02-18 16:49

Det fungerar om man kodar om '—' (em dash) till \u2014.

var2 = var1.replace("\u2014", "x");

Men hur placerar man det i ett regex? Behöver det gör att använda global (g).

var2 = var1.replace(/\u2014/g, "x"); fungerar inte i Safari 2, men det fungerar i Safari 3 och Firefox 2.

Senast redigerat 2008-02-18 18:19

Nej, jag testade i Safari 3, Opera och Firefox, och det funkar i alla. I Safari är kodningen "Förvald" (vilket enligt min programinställning är ISO Latin 1) men eftersom jag har lagt in meta-taggen så har ju den kodningen företräde, alltså tolkas det som UTF8

Däremot är det så klart viktigt att du ser till att spara textfilen som UTF8. De exakta stegen hos mig är

* Markera texten i ditt första inlägg (jag använder Opera som webbläsare)
* Skapa ett nytt dokument i BBEdit, se till att det är UT8-kodat
* Klistra in
* Lägg till metataggen
* Voila!

Jag tror att du har ett MacRoman-kodat textdokument, och då blir det såklart fel.

1
Bevaka tråden