webForumDet fria alternativet

Ersätta åäö med aao med regex

.NET

9 svar · 2 795 visningar · startad av maqe

Medlem sedan dec. 2003824 inlägg
Frågan#1

Jag har ett uttryck jag tänkte använda mig av för att skapa lite snyggare urlar. Nedanstående utryck använder jag och ersätter med -

[^\w\@-]

Jag skulle även vilja komplettera detta med att ersätta åäö mot aao i ett och samma uttryck om det går. Någon som känner sig hjälpsam idag?

Medlem sedan dec. 2003824 inlägg
#2

Med närmare eftertanke så kanske det inte går att lösa med ett uttryck än man får göra separata replace?

Medlem sedan nov. 20014 054 inlägg
#3

En söksträng efter åäöÅÄÖ borde väl kunna se ut något liknande som

 [ åäöÅÄÖ ]

Men hur ersätta beroende på å ä eller ö, en annan femma. Kanske enklare att bara göra en Replace på varje bokstav. :)

Medlem sedan dec. 2003824 inlägg
#4

Jo den möjligheten finns ju men jag tänkte om det fanns något snyggare sätt :)

Medlem sedan dec. 19996 721 inlägg
Medlem sedan juni 20019 519 inlägg
#6
subjectString = Regex.Replace(subjectString, "([åä])", "a", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline);
subjectString = Regex.Replace(subjectString, "(ö)", "o", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline);

Fast emission verkar vara rätt mycket "bättre" ;)

Medlem sedan nov. 20014 054 inlägg
#7

emission skrev:

http://weblogs.asp.net/fmarguerie/archive/2006/10/30/removing-diacritics-accents-from-strings.aspx

Tog mig friheten att göra den till VB


Imports System.Globalization ' <-- måste vi importera!

    Public Function RemoveDiacritics(ByVal s As String) As String

        Dim normalizedString = s.Normalize(NormalizationForm.FormD)
        Dim stringBuilder As New StringBuilder
        Dim i As Integer = 0

        For i = 0 To normalizedString.Length - 1
            Dim c As Char = normalizedString(i)
            If CharUnicodeInfo.GetUnicodeCategory(c) <> UnicodeCategory.NonSpacingMark Then
                stringBuilder.Append(c)
            End If
        Next

        Return stringBuilder.ToString()
    End Function

Helt otestad.. finns säkert något fel! :e

Medlem sedan juni 20019 519 inlägg
#8

Översättning från:
http://www.carlosag.net/Tools/CodeTranslator/Default.aspx

Public Shared Function RemoveDiacritics(ByVal s As String) As String
    Dim normalizedString As String = s.Normalize(NormalizationForm.FormD)
    Dim stringBuilder As StringBuilder = New StringBuilder
    Dim i As Integer = 0
    Do While (i < normalizedString.Length)
        Dim c As Char = normalizedString(i)
        If (CharUnicodeInfo.GetUnicodeCategory(c) <> UnicodeCategory.NonSpacingMark) Then
            stringBuilder.Append(c)
        End If
        i = (i + 1)
    Loop
    Return stringBuilder.ToString
End Function

Så det ska nog fungera som du skrev ;)

Medlem sedan dec. 2003824 inlägg
#9

emission skrev:

http://weblogs.asp.net/fmarguerie/archive/2006/10/30/removing-diacritics-accents-from-strings.aspx

Precis vad jag letade efter ... tack för hjälpen

Medlem sedan juni 20014 421 inlägg
#10

Jag hade dock valt att ersätta å med aa, ä med ae och ö med oe.

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)