Kom ihåg mig?
Home Menu

Menu


RegExp-hjälp för ord med åäö

Ämnesverktyg Visningsalternativ
Oläst 2008-09-25, 06:47 #1
Slacker Slacker är inte uppkopplad
Medlem
 
Reg.datum: Apr 2008
Inlägg: 276
Slacker Slacker är inte uppkopplad
Medlem
 
Reg.datum: Apr 2008
Inlägg: 276
Jag behöver hjälp med ett RegExp som i en mening skall fånga upp alla ord, som innehåller åäö och också helst mellanrummet mellan ord, så att två närliggande ord med åäö behandlas som en enhet av preg_match.

Nu har jag följande preg_match, som fångar in ord, som inte innehåller åäö och alltså indirekt hittar orden.

if (!preg_match("/^[\x21-\x7f]*$/", $blk))

Följande fungerar på samma sätt:

if (!preg_match("/^[^åäöÅÄÖ]*$/", $blk))

Följande fungerar inte:

if (preg_match("/^[åäöÅÄÖ]*$/", $blk))
Slacker är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-25, 07:37 #2
turborakettis avatar
turboraketti turboraketti är inte uppkopplad
Medlem
 
Reg.datum: Feb 2008
Inlägg: 76
turboraketti turboraketti är inte uppkopplad
Medlem
turborakettis avatar
 
Reg.datum: Feb 2008
Inlägg: 76
Uttrycket /^[åäöÅÄÖ]*$/ matchar alla strängar som ENDAST består av åäö, samt tomma strängar eftersom du har en asterisk (*) istället för plus (+). Vill du ha ett uttryck som hittar ord om innehåller minst ett å, ä eller ö använder du helt enkelt "/[åäöÅÄÖ]/" eller "/[åäö]/i".

Om jag förstod det var du ute efter att matcha alla ord i en sträng som innehåller åäö, men på ditt sätt att beskriva det antar jag att du först splittar strängen till enskilda ord och applicerar uttrycket på vart och ett av orden. Annars finnsmöjligheten att göra ett uttryck som hanterar hela texter direkt:
/((\b(\w*[åäö]+)+\b)\s+)*(\b\w+\b)*)+/i
Eftersom det är KLIENTSIDANS tekniker vi diskuterar på detta forum tänker jag inte gå in på hur du använder detta i PHP, men jag kan hinta om att preg_match_all skulle kunna vara en passande funktion. Detta får du fråga om på rätt forum...

Anledningen till att jag svarade här är att RegExp ju också finns i Javascript...

EDIT: missade visst en parantes i regexp:et...
turboraketti är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-26, 15:27 #3
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Om texten som kommer in är UTF-8, så måste PHP filen också vara i UTF-8, annars matchar det inte.
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-26, 18:56 #4
Slacker Slacker är inte uppkopplad
Medlem
 
Reg.datum: Apr 2008
Inlägg: 276
Slacker Slacker är inte uppkopplad
Medlem
 
Reg.datum: Apr 2008
Inlägg: 276
Tack. /[åäöÅÄÖ]/" fungerade för att matcha ord med åäö i, medan /((\b(\w*[åäö]+)+\b)\s+)*(\b\w+\b)*)+/i fungerade inte och gav felmeddelande.

Det löste dock inte mitt problem, vilket tyder på att programkoden måste ändras snarare än RegExp. Jag håller på med en patch av emailer.php i phpbb, som skall göra att ord med åäö kodas i ISO-8859-1. Patchen gör det, men när orden ligger nära varandra t.ex på inlägg så kodas orden separat, men de borde kodas, som en enhet för att det skall bli mellanrum mellan orden. Nu blir det påinlägg med patchen.
Patchen finns här:
http://www.phpbb.com/community/viewt...4361&p=1542972

Även meddelandena från detta forum är okodade i subjectraden, vilken är en nackdel för AVG8:s mailscanner raderar okodade åäö från subjectraden. Så här såg meddelandet ut från denna sajt:

Trd prenumerations svarsmeddelande, vilket skulle varit Tråd prenumerations svarsmeddelande
Slacker är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-27, 18:22 #5
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by Slacker@Sep 26 2008, 18:56
… som skall göra att ord med åäö kodas i ISO-8859-1.
Varför ska det kodas i ISO, kan du inte använda utf-8 och sedan koda det som quoted-printable som det bör göras för subjektraden?

Och istället för att söka efter ord som innehåller åäö så skulle du kunna vända på det och behandla strängar som inte bara innehåller a-zA-Z0-1_- för att koda även exempel vi ü som mycket väl också skulle kunna förekomma - men det kanske är lite überkurs ;-)

Jag skulle använda /\pL+/u eller liknande (dvs alla latinska bokstäver istället för att lista upp enskilda bokstäver) men då får du ju även med strängar som inte innehåller några åäö…
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-28, 06:23 #6
Slacker Slacker är inte uppkopplad
Medlem
 
Reg.datum: Apr 2008
Inlägg: 276
Slacker Slacker är inte uppkopplad
Medlem
 
Reg.datum: Apr 2008
Inlägg: 276
Patchen, som jag ursprungligen använde var i ISO-8859-1 och därför använde jag det. Det fanns ingen patch för UTF-8, som jag kunde använda. Tyvärr klarar jag själv inte av att skriva en patch i UTF-8. Det är konstigt att det inte finns en sådan patch till phpbb2 för det är ju mycket använt forum världen över.

Den ursprungliga patchen gjorde precis som du efterlyste dvs matchade inte ord som bara innehöll a-zA-Z och det fungerade inte fullt ut utan att det blev ihopskrivning och därför ville jag ändra.
Slacker är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-28, 07:39 #7
Alexs avatar
Alex Alex är inte uppkopplad
Administratör
 
Reg.datum: Sep 2004
Inlägg: 1 621
Alex Alex är inte uppkopplad
Administratör
Alexs avatar
 
Reg.datum: Sep 2004
Inlägg: 1 621
Fler och fler borde börja använda UTF-8 till allt. Så himla mycket smidigare när man gör det. Skulle inte unicode-funktionerna funka i PHP till det du vill göra?
__________________
@Zn4rK - Börja blogga - Paintball i Göteborg
Det jag skriver är mina personliga åsikter och återspeglar inte vad WN eller andra företag jag representerar tycker.
Alex är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-28, 15:44 #8
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Originally posted by Alex@Sep 28 2008, 07:39
Fler och fler borde börja använda UTF-8 till allt. Så himla mycket smidigare när man gör det. Skulle inte unicode-funktionerna funka i PHP till det du vill göra?
Jo, numera finns det absolut ingen anledning till att inte använda utf-8. Det går ju att köra utf8_encode också.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-28, 16:13 #9
Slacker Slacker är inte uppkopplad
Medlem
 
Reg.datum: Apr 2008
Inlägg: 276
Slacker Slacker är inte uppkopplad
Medlem
 
Reg.datum: Apr 2008
Inlägg: 276
Jag hittade lösningen på problemet imorse och har lyckats enkoda hela subjectraden i ISO-8859-1. Det var en enkel lösning ursprungligen avsedd för UTF-8, men fungerar också för ISO-8859-1

http://www.phpbb-se.com/forum/viewtopic.php?f=4&t=5797
Slacker är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-28, 20:53 #10
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Du kan också använda
Kod:
$subject = '=?iso-8859-1?q?'.preg_replace('/[^\x21-\x3C\x3E-\x7E\x09\x20]/e','sprintf("=%02x",ord( "$0" ));',$subject).'?=';
som gör samma sak men lite kompaktare.

Skulle du vilja använda utf-8 (vilket du borde egentligen för att slippa liknande problem i framtiden) så byter du bara ut iso-8859-1 mot utf-8.

Tänk på även mottagare och avsändare ska ”printed-quotable”-kodas om det innehåller åäö osv. t.ex. avsändare Åsa Kärnö måste kodas…
martine är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 18:42.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017