NovaMedlem sedan feb. 2005216 inlägg 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 Ta bort semikolonet på raden
if (preg_match("/^07\\d{2}-\\d{6}$/", $mobilnummer));
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 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 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.
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 -
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">
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
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 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.
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.
Dumt av mig:
[\s\-]+
kan behövas, men spin's exempel borde fungera.
NovaMedlem sedan feb. 2005216 inlägg 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.
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.