FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
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)) |
||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Medlem
|
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... |
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Klarade millennium-buggen
|
Om texten som kommer in är UTF-8, så måste PHP filen också vara i UTF-8, annars matchar det inte.
|
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Medlem
|
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 |
||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Mycket flitig postare
|
Citat:
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 åäö… |
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Medlem
|
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. |
||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Administratör
|
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. |
|||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Supermoderator
|
Citat:
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Medlem
|
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 |
||
![]() |
![]() |
![]() |
#10 | |||
|
||||
Mycket flitig postare
|
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).'?='; 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… |
|||
![]() |
![]() |
Svara |
|
|