Vinnaren i pepparkakshustävlingen!
2021-12-14, 08:04
  #1
Medlem
31G350125s avatar
Om man vill göra om ett telefonnummer ifrån 0704122320 ( Random nr , har ingen koppling till mej som TS ) till +46704122320 hur gör man lämpligast då?
Citera
2021-12-14, 08:19
  #2
Medlem
I vilket sammanhang?
Citera
2021-12-14, 08:48
  #3
Medlem
31G350125s avatar
Citat:
Ursprungligen postat av PatricHbg
I vilket sammanhang?

Om inputen är 0704448848 så vill jag göra om strängen till +4670407044

Hur gör man det med regular express? Det skall bara modifiera det första tecken i strängen.
__________________
Senast redigerad av 31G350125 2021-12-14 kl. 08:54.
Citera
2021-12-14, 09:24
  #4
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av 31G350125
Om inputen är 0704448848 så vill jag göra om strängen till +4670407044

Hur gör man det med regular express? Det skall bara modifiera det första tecken i strängen.
Jag skulle inte använda RegEx enbart för detta ändamål. Använd i så fall RegEx för att hitta (och samla ihop) telefonnummer i en array. Sedan itererar du över denna array och gör följande på varje sträng:

Kod:
<?php

$input
="0706712342";

if (
$input[0]=="0")
    
$output="+46".ltrim($input"0");
else
    
$output=$input;

    echo 
"$output";
?>

Om du enbart ska omvandla ett telefonnummer så är ju saken ännu enklare.
Citera
2021-12-14, 09:24
  #5
Medlem
Kaustis avatar
Citat:
Ursprungligen postat av 31G350125
Om inputen är 0704448848 så vill jag göra om strängen till +4670407044

Hur gör man det med regular express? Det skall bara modifiera det första tecken i strängen.

För att hitta det första tecknet i en sträng så använder du dig av ^. Så för att hitta den första nollan i strängen blir ditt regex då ^0.

För att köra det i PHP och byta ut mot +46 så blir det väl såhär:

Kod:
<?php 
$string 
'0701234567';
$pattern '/^0/'
$replacement '+46';
echo 
preg_replace($pattern$replacement$string);
?>
Citera
2021-12-14, 09:26
  #6
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Kausti
För att hitta det första tecknet i en sträng så använder du dig av ^. Så för att hitta den första nollan i strängen blir ditt regex då ^0.
Granted, ditt exempel är kortare och snyggare.
Citera
2021-12-15, 23:31
  #7
Medlem
SKetchers avatar
Citat:
Ursprungligen postat av Kausti
För att hitta det första tecknet i en sträng så använder du dig av ^. Så för att hitta den första nollan i strängen blir ditt regex då ^0.

För att köra det i PHP och byta ut mot +46 så blir det väl såhär:
[..]
Citat:
Ursprungligen postat av Enterprise
Granted, ditt exempel är kortare och snyggare.

Nostalgiskt. Precis en sådan här uppgift var det första jag gjorde i mitt första jobb som programmerare.

I mitt fall handlade det om att via en nätspindel samla in telefonnummer.

Ett tips är att inte lita på input, särskilt när standarden kan se så olika ut.
Kod:
// Hur nummer brukar se ut i det vilda när du inte har kontroll över input
$strings = [
    
'0701234567',
    
'701234567',
    
'46_70_1234567',
    
'+46701234567',
    
'701234567',
    
'070 123 45 67',
    
'01234567',
    
' 0701234567',
    
'0701234567 ',
    
'<0701234567>',
    
'Asthon Kutcher',
];

$pattern '/^0/'
$replacement '+46';

foreach(
$strings as $str){
    echo 
preg_replace($pattern$replacement$str) . PHP_EOL// icke sa nicke, rätt kaoz.

Citera
2021-12-15, 23:39
  #8
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av SKetcher
Ett tips är att inte lita på input, särskilt när standarden kan se så olika ut.
Absolut i Real world scenario!
S.I.S.U. o.s.v.

En sådan komplex "sample data" tror jag blir svår att tygla med RegEx.
Tvätta den med vanlig PHP eller annat språk först istället.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback