webForumDet fria alternativet

Gatuadress

16 svar · 1 807 visningar · startad av learn

learnMedlem sedan jan. 20051 130 inlägg
#1

I min gästbok så matar användaren in sin adress. Nu vill jag att den inmatade adressen ska snyggas till. Den ska exempelvis se ut enligt följande: Grönagatan 24B. Alltså, stor bokstav i början, och stor bokstav efter numret (och dessutom inget mellanrum mellan gatans namn och "vägen"/"gatan" samt inget mellanrum mellan numret och bokstaven).

Så om användaren matar in detta: "gröna gatan 13 B", så ska det bli "Grönagatan 13B".

Likaså om användaren matar in följande "blåbärs vägen 5 g", så ska det bli "Blåbärsvägen 5G".

Användaren ska inte få ett felmeddelande om denne inte matar in enligt ovannämnda regler, men jag vill ha en php-funktion som rättar till det innan adressen sätts in i databasen.

Hur gör jag en sådan funktion...??

Tack så mkt!

fiddlerMedlem sedan juli 20023 617 inlägg
#2

Inget svar på frågan, men tänk på att det finns två- och tredelade gatunamn...

learnMedlem sedan jan. 20051 130 inlägg
#3

Yepp, det är endast mellanslaget mellan namnet på gatan och gatan/gata/vägen/väg samt mellanslaget mellan numret och den eventuella bokstaven som skall tas bort.

cayaMedlem sedan aug. 20051 448 inlägg
#4

jamen det är ju en skillnad på särskrivningen gustav frödings gatan 5 och gustav frödingsgatan...
hur hade du tänkt att den skulle reagera på gustav frödings gata 5?

Mr. N.Medlem sedan sep. 20025 507 inlägg
#5

Jag har aldrig hört talas om Grönagatan i ditt exempel, däremot finns Gröna gatan på flera orter. Om det nu ens finns en Grönagatan, hur ska skriptet veta om namnet ska särskrivas eller inte?
Jag tror inte du kommer undan manuell kontroll, stor bokstav först och sist är nog inga problem dock.

learnMedlem sedan jan. 20051 130 inlägg
#6

Sant, men om vi säger så här då, endast mellanslaget mellan numret och efterföljande bokstav ska tas bort + ovannämnda regler.

learnMedlem sedan jan. 20051 130 inlägg
#7

Någon som vet hur jag kan göra?

Klargörande:
"gröna gatan 34 b" ska bli "Gröna gatan 34B"
(stor bokstav i början och slutet, inget mellanslag mellan nummer och bokstav)

LaspMedlem sedan juli 200012 980 inlägg
#8

Ett sätt att starta är att kolla postnummerkatalogen.
Det finns en större del där gatunamnen inkl postnrområden finns med.
Problemet är att man kanske måste börja med postnumret, visa orten och sedan verifiera stavningen mot Postens register.

fiddlerMedlem sedan juli 20023 617 inlägg
#9

För att se till att första bokstaven blir stor kan du använda ucfirst.
http://www.php.net/manual/sv/function.ucfirst.php

learnMedlem sedan jan. 20051 130 inlägg
#10

fiddler skrev:

För att se till att första bokstaven blir stor kan du använda ucfirst.
http://www.php.net/manual/sv/function.ucfirst.php

Bra då har vi ju löst första steget, Nu vill jag ha stor bokstav i slutet också, samt ta bort eventuellt blanksteg innan sista bokstaven.

MeleaMedlem sedan juli 20033 147 inlägg
#11

Knåpade ihop en liten funktion.

function Address($text) {

	$lastletter = substr($text,-1,1);

	if(eregi("^[a-zåäö]", $lastletter)){
		$lastletter = strtoupper($lastletter);
	}

	return ucfirst(strtolower(substr($text,0,-1))).$lastletter;

}

echo Address('brokullevägen 25b');

samt ta bort eventuellt blanksteg innan sista bokstaven.

Kommer inte på någon lösning för detta just nu.

learnMedlem sedan jan. 20051 130 inlägg
#12

Tack Melea, någon annan som kan hjälpa mig med det sista?

MeleaMedlem sedan juli 20033 147 inlägg
#13

En liten fullösning.

function Address($text) {

    $lastletter = substr($text,-1,1);
    $space = substr($text,-2,1);

    if(eregi("^[a-zåäö]", $lastletter)){
        $lastletter = strtoupper($lastletter);
    }

    if(eregi("[^\s]", $space)) {
    	$space = str_replace(" ", "", $space);
    }

    return ucfirst(strtolower(substr($text,0,-2))).$space.$lastletter;

}

echo Address('brokullevägen 25 å');

Någon annan får gärna kommentera om det är det enklaste/bästa sättet att lösa det på.

PelletsteknikMedlem sedan feb. 200844 inlägg
#14

Jättebra funktion.
Om en kund har g:a vägen som adress, då blir det G:a vägeN.
Hur ska man göra för att t.ex sista bokstaven blir större bara om det är en siffra innan?

erikdalMedlem sedan aug. 20111 inlägg
#15

Prova denna

Om en kund har g:a vägen som adress, då blir det G:a vägeN.
Hur ska man göra för att t.ex sista bokstaven blir större bara om det är en siffra innan?

<?php

function Address($text) {

$numAddr = false;

for ($i = 0; $i \< strlen($text); $i++)
{
	if (is_numeric(substr($text, $i, 1)))
	{
		$numAddr = true;
		break;
	}
}

$lastletter = substr($text,-1,1);
$space = substr($text,-2,1);

if (preg_match('^\[a-zåäö\]^', $lastletter) && $numAddr)
{
    $lastletter = strtoupper($lastletter);
}

if(preg_match('\[^\\s\]', $space)) {
    $space = str_replace(" ", "", $space);
}

return ucfirst(strtolower(substr($text,0,-2))).$space.$lastletter;

}

echo Address('brokullevägen 25 å') . "<br>";
echo Address('G:a gatan') . "<br>";
echo Address('G:a gatan 123 g') . "<br>";

?>

OBS: För funktionen eregi gäller

This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.

PelletsteknikMedlem sedan feb. 200844 inlägg
#16

ärstavägen blir ärstavägen, när det är åäö som första bokstav.

PelletsteknikMedlem sedan feb. 200844 inlägg
#17

Tack, nu fungerar det.
Jag lade till detta:

 if (!function_exists('mb_ucfirst')) {
    function mb_ucfirst($str, $encoding = "UTF-8", $lower_str_end = false) {
      $first_letter = mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding);
      $str_end = "";
      if ($lower_str_end) {
	$str_end = mb_strtolower(mb_substr($str, 1, mb_strlen($str, $encoding), $encoding), $encoding);
      }
      else {
	$str_end = mb_substr($str, 1, mb_strlen($str, $encoding), $encoding);
      }
      $str = $first_letter . $str_end;
      return $str;
    }
  }
127 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)