---
title: "RegExp som lägger till nollor?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/191825-regexp-som-lägger-till-nollor"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "bassebhu"
published: "2013-10-30T01:45:26.000Z"
updated: "2014-02-19T18:51:55.000Z"
replies: 7
views: 1518
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/191825-regexp-som-lägger-till-nollor"
---

# RegExp som lägger till nollor?

## #1 — bassebhu, 2013-10-30T01:45Z

Hallå!

Jag har tidskoder som jag skulle vilja formatera med inledande nollor om man inte har angivit det. Här är några exempel på hur jag vill att man ska kunna mata in och hur det ska rättas till:

1:2 blir 01:02
1:2:3 blir 01:02:03
1:2:3:4 blir 01:02:03:04 (max är tre kolon)

Fler exempel:
1:20 blir 01:20
01:2:30 blir 01:02:30
10:20:03:4 blir 10:20:03:04

Min start innan jag gav upp hehe:

```
function format_timecode($tc)
{
	if( preg_match("/:/", $tc) ) {
		//strpos($tc, ':')
	}

	return $tc;
}
```

Tack!

Permalänk: https://www.webforum.nu/p/191825

## #2 — voigtann1, 2013-10-30T06:22Z

```
function format_timecode($tc)
{
	$timeFormat = preg_split("/:/", $tc);
	$response = "";

	foreach($timeFormat as $t){
		$response.= substr("0" . $t, -2) . ":";
	}

	return substr($response, 0, -1);
}
```

 finns förhoppningsvis bättre sätt att skriva det på.

regex letar efter mönster, vill du att man skall validera invärdet innan den kör koden?:

```
function format_timecode($tc)
{
	if(preg_match('/^\d{1,2}((:\d{1,2}){1,3})$/', $tc)){
		$timeFormat = preg_split("/:/", $tc);
		$response = "";

		foreach($timeFormat as $t){
			$response.= substr("0" . $t, -2) . ":";
		}

		return substr($response, 0, -1);
	}
	return null;
}
```

Permalänk: https://www.webforum.nu/p/2314550

## #3 — nitro2k01, 2013-10-30T06:50Z

```
function format_timecode($tc)
{
        return preg_replace('/(:|^)(\\d)(?=:|$)/', '${1}0$2', $tc);
}
```

Den koden letar efter valfritt antal segment och lägger till en nolla vid behov. Ett segment består av början av strängen eller ett kolon, följt av exakt en nuffra, följt av slutet av strängen eller kolon. ?= "spolar tillbaka" matchningen så att två fält som behöver fixas som kommer efter varandra inte krånglar, typ 1:2:3:4 eftersom uttrycket annars hade ätit nästa fälts inledande kolon. 

Uttrycket gör ingen validering i övrigt utan arbetar matchar bara enskilda fält, så en sträng med tusen fält eller något i stil med 1:bajs:3:4 kommer också fixas.

Permalänk: https://www.webforum.nu/p/2314552

## #4 — bassebhu, 2013-10-30T08:45Z

> **[nitro2k01 skrev:](https://www.webforum.nu/p/1569225)**
>
> ```
> function format_timecode($tc)
> {
>         return preg_replace('/(:|^)(\\d)(?=:|$)/', '${1}0$2', $tc);
> }
> ```
>
> Den koden letar efter valfritt antal segment och lägger till en nolla vid behov. Ett segment består av början av strängen eller ett kolon, följt av exakt en nuffra, följt av slutet av strängen eller kolon. ?= "spolar tillbaka" matchningen så att två fält som behöver fixas som kommer efter varandra inte krånglar, typ 1:2:3:4 eftersom uttrycket annars hade ätit nästa fälts inledande kolon. 
>
> Uttrycket gör ingen validering i övrigt utan arbetar matchar bara enskilda fält, så en sträng med tusen fält eller något i stil med 1:bajs:3:4 kommer också fixas.

Fett, funkade utmärkt. Tack båda!

Kan preg_replace('/(:\|^)(\\\\d)(?=:\|$)/', '${1}0$2', $tc); översättas till javascript också? Jag testade detta, men verkar inte funka:

```
tc.replace('/(:|^)(\\d)(?=:|$)/', '${1}0$2');
```

Permalänk: https://www.webforum.nu/p/2314556

## #5 — voigtann1, 2013-10-30T08:59Z

```
ts.replace(/(:|^)(\d)(?=:|$)/g, "$10$2");
```

Permalänk: https://www.webforum.nu/p/2314557

## #6 — bassebhu, 2013-10-30T09:19Z

Asbra! Tack igen guys  :)

Permalänk: https://www.webforum.nu/p/2314558

## #7 — bassebhu, 2014-02-19T18:47Z

Kan jag köra samma replace, men lägga till så att punkter ersättas med kolon?

```
preg_replace('/(:|^)(\\d)(?=:|$)/', '${1}0$2', $tc);
```

Tack för tips!

Edit/ Eller så kör jag bara en sån replace före den här.

Permalänk: https://www.webforum.nu/p/2315567

## #8 — voigtann1, 2014-02-19T18:51Z

replace fungera väl

Permalänk: https://www.webforum.nu/p/2315568

---

Tråden på webben: https://www.webforum.nu/amne/php/191825-regexp-som-lägger-till-nollor
