webForumDet fria alternativet

Validera mobilnummer

PHP

13 svar · 2 238 visningar · startad av Nova

Medlem sedan feb. 2005216 inlägg
Frågan#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?

Medlem sedan jan. 2005953 inlägg
#2

Ta bort semikolonet på raden

if (preg_match("/^07\\d{2}-\\d{6}$/", $mobilnummer));
Medlem 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

Medlem 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.

Medlem 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.

Medlem 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 -

Medlem 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">
Medlem 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

Medlem 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!

Medlem 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.

Medlem 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.

Medlem sedan juni 20019 519 inlägg
#12

Dumt av mig:

[\s\-]+

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

Medlem 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.

Medlem 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.

253 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)