Just nu i M3-nätverket
Jump to content

konttollera sträng


Carro_82

Recommended Posts

Jag vill kontollera om en variabel bara innehåller siffror hur gör jag?

jag har försökt så här men det fungerade inte.

 

 

 

preg_match('/[1-9]/', $var)

 

Antar att detta bara kontrollerar om det finns en siffra i strängen.

 

 

/Carro_82

 

Link to comment
Share on other sites

-Patrik Johansson-

Testa

![color="#ff0000"]preg_match[/color] ("/[^0-9]/", $[color="#0000ff"]var[/color]);

Detta uttryck kollar istället om dte finns något ickesiffra. ! framför preg_match negerar detta.

 

//Patrik J

"Insanity: doing the same thing over and over again and expecting different results."
- citat av Albert Einstein

 

Link to comment
Share on other sites

Spellar ingen roll om man använder ! frammför eller inte eftersom det bara kontrollerar ett tecken

 

t ex om man testar 
$[color="#0000ff"]var[/color]="a1"; eller 
$[color="#0000ff"]var[/color]="4b";
[color="#006400"]//Om en siffra inte hittas[/color]
[color="#0000ff"]if[/color](![color="#ff0000"]preg_match[/color] ("/[^0-9]/", $[color="#0000ff"]var[/color])){
[color="#0000ff"]echo[/color]"FEL";
}
[color="#006400"]// om en siffra hittas[/color]
[color="#0000ff"]else[/color]{
[color="#0000ff"]echo[/color]"RÄTT";
} 

så kommer RÄTT att skrivas ut alltså måste vilkoret vara något annat om det ska kontrollera hela strängen

 

 

 

 

 

 

 

Link to comment
Share on other sites

Anjuna Moon

Använd global matchning för att matcha hela strängen:

 

[color="#ff0000"]preg_match[/color]_all(......)

 

Link to comment
Share on other sites

preg_match_all kontrollerar barar och skapar en array om det finns på flera ställen. felet i ligger i regexpen:

 

 

/[0-9]/

matchar en siffra

 

/[0-9]{1,}/

matchar en eller flera siffror

 

Link to comment
Share on other sites

Istället för krångla till det med regexpar kan du använda dig av den eminenta funktionen is_int alternativt is_numeric (http://se.php.net/is_int / http://se.php.net/is_numeric). Detta förutsätter såklart att det enbart är siffror du vill ha.

 

--

"I killed my dinner with karate -

kick ´em in the face, taste the body;

shallow work is the work that I do." -Joanna Newsom

 

Stoppa mjukvarupatenten nu! http://www.ffii.se/

 

Link to comment
Share on other sites

Det låter mer som att ctype_digit() är det som eftersöks (förutsatt att man har en någorlunda ny PHP-version): http://se.php.net/ctype_digit

 

Notera att is_int() bara funkar om man verkligen har ett integer-värde, inte om man har en sträng som representerar ett heltal. Mao is_int(123) == true och is_int('123') == false.

 

is_numeric funkar både för integer-värden och strängar som representerar olika typer av tal, t ex "-12", "3.42", "-2.3e12", "0xCAFE" osv.

 

Om man bara vill försäkra sig om att en variabel innehåller ett heltal och inget dumt, så kan man även använda intval() eller casta (mao skriva $talet = (int) $talet;). Då kommer flyttal att avrundas och icke-numeriska strängar blir 0.

 

Link to comment
Share on other sites

Jag tror du missuppfattade det reguljär uttrycket. /[^0-9]/ matchar ett tecken som inte är en siffra. Mao kommer villkoret i din if-sats att bli sant om en icke-siffra inte hittats (mao alla tecken var siffror). Det räcker att hitta ett ogiltigt tecken för att hela strängen ska betraktas som ogiltig.

 

Så här skulle jag göra istället:

 

$[color="#0000ff"]var[/color] = '2z';

[color="#006400"]// Om ett ogiltigt tecken hittats[/color]
[color="#0000ff"]if[/color] ([color="#ff0000"]preg_match[/color]('/\D/', $[color="#0000ff"]var[/color]))
{
[color="#0000ff"]echo[/color] 'FEL';
}
[color="#006400"]// Om inget ogiltigt tecken hittats[/color]
[color="#0000ff"]else[/color]
{
[color="#0000ff"]echo[/color] 'RÄTT';
}

Notera att \D betyder samma sak som [^0-9].

 

Se även min andra kommentar för alternativa lösningar.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...