webForumDet fria alternativet

Validera mobilnummer

13 svar · 2 238 visningar · startad av Nova

NovaMedlem sedan feb. 2005216 inlägg
#1

Jag försöker att validera att det är ett mobilnummer och om det är det ska det göra en sak och om det inte är det ska det inget göra.

$mobilnummer = $db_ary['customers_telephone'];
						if (preg_match("/^07\\d{2}-\\d{6}$/", $mobilnummer)); // Hur man nu skiver detta :$
						{ echo $mobilnummer; }
						else{ 
						 }

Skriver jag så här får jag ett felmeddelande att det är Parse error: syntax error, unexpected T_ELSE
Hur gör jag enklast?

metalboyMedlem sedan jan. 2005953 inlägg
#2

Ta bort semikolonet på raden

if (preg_match("/^07\\d{2}-\\d{6}$/", $mobilnummer));
StefanBergfeldtMedlem sedan sep. 2004828 inlägg
#3

Men det här kräver ju att jag skriver mitt nummer som 07XX-XXXXXX och inte som 07X-XXX XX XX som jag brukar

NovaMedlem sedan feb. 2005216 inlägg
#4

Tack metalboy nu tog jag mig ett steg längre!
Hm..
Tanken var att det ska fånga upp alla nummer som börjar på 07.

SPiNMedlem sedan mars 20007 896 inlägg
#5

Som Stefan säger är du tvungen att skriva in ditt telefonnummer i just formatet 07XX-XXXXXX för att din kod ska fungera. Ett bättre alternativ är att ta bort alla "ogiltiga" tecken och sedan göra en matchning. Ett exempel:

$number = preg_replace("/\D/", '', $db_ary['customers_telephone']);

if (preg_match('/^07\d{8}$/', $number)) {
	echo "Match!";
} else {
	echo "No match.";
}

Nu kommer matchningen ske mot ett 10 tecken långt telefonnummer, oavsett tidigare format. Tänk dock på att "bogus-nummer" som t.ex. "jioi0mc792jkn -98k nfnn 8723,oje " kommer att returnera en match, då ogiltiga tecken raderas från strängen innan matchningen sker.

voigtann1Medlem sedan juni 20019 519 inlägg
#6

istället för \D så kan du köra [\s-]+ så kommer den inte validera på "jioi0mc792jkn -98k nfnn 8723,oje " men: " 07 0 1 2 3 4 5 6 7 0" då den ersätter bara mellanslag och -

streetrobbanMedlem sedan jan. 20011 140 inlägg
#7

Du kan ju spärra användaren från att ange vissa teckan i textrutan också. Med nedanstående kod kan användaren bara skriva 10 siffror i rutan.

<input type="text" onkeyup="if(!this.value.match(/^\d+$/)){ this.value=(this.value.match(/\d+/))?this.value.match(/\d+/):''; }"  maxlength="10">
StefanBergfeldtMedlem sedan sep. 2004828 inlägg
#8

Men det där bygger på javascript, och alla användare kör inte javascript, speciellt inte de som vill sabotera

SPiNMedlem sedan mars 20007 896 inlägg
#9

voigtann1 skrev:

istället för \D så kan du köra [\s-]+ så kommer den inte validera på "jioi0mc792jkn -98k nfnn 8723,oje " men: " 07 0 1 2 3 4 5 6 7 0" då den ersätter bara mellanslag och -

Det är helt riktigt, men jag använde \D som en "feature" - alltså att man faktiskt vill ta bort icke numeriska tecken! Men jag förstår självklart att man kanske inte alltid vill det, då är din lösning att föredra. Man kan ju utveckla det ännu mer, t.ex. att tillåta '+46' istället för första nollan (räcker iofs med en replace), o.s.v.

Men du har helt rätt i det du skriver, bra tips!

NovaMedlem sedan feb. 2005216 inlägg
#10

Spin och voigtann1, det fungerar. Men blir något konstigt när mobilnumren innehåller - (bindestreck).

//Edit:
Tillägg det blir så om man kör med \s och inte med \D.

streetrobbanMedlem sedan jan. 20011 140 inlägg
#11

StefanBergfeldt skrev:

Men det där bygger på javascript, och alla användare kör inte javascript, speciellt inte de som vill sabotera

Det kanske stämmer, jag ville bara dela med mig av en alternativ lösning.

voigtann1Medlem sedan juni 20019 519 inlägg
#12

Dumt av mig:

[\s\-]+

kan behövas, men spin's exempel borde fungera.

NovaMedlem sedan feb. 2005216 inlägg
#13

Det blir något tokigt när jag ska skriva ut resultaten och telefonnummret innehåller (innehöll) - (bindestreck) eller mellanslag.
Edit:Det går bra att skriva ut alla mobilnummer som ej är "städade" och första "städade" alla efter det "städade" blir det tokigt med.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#14

Jag har kört liknande "fullösningar" som ditt ovan, men har du ett större system kommer det falla förr eller senare.

Jag gjorde så att jag gjorde om och delade upp i tre fält: Landskod, Riktnummer, Nummer och sen sparar jag alla nummer i formatet 46-70-1234567.

Alla användare blev sedan tvingade att ändra sitt nummer enligt min nya modell och nu har jag allt i ett format man kan göra vad man vill med och allt ser likadant ut.

Skulle överväga att göra likadant om jag vore du.

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)