2010-04-19 15 views
6

Ben preg_match'in aşağıdaki regexp() ile çalışmak için almak gibi:PHP'deki negatif olmayan tam sayılarla eşleşmesi için düzenli ifade?

@^(?:[1-9][0-9]*)|[email protected] 

Oysa o eşleştiğini garip '-0', dikkate vardır hayır '-' Hiç regexp izin. Niye ya?

Dahası garip olduğunu sen bölü parçaları geçerseniz |: vb

@^0|(?:[1-9][0-9]*)[email protected] 

Böyle '-2' ve '-10' gibi tüm olumsuz tamsayılar maçları,

Ne am Ben burada özlüyorum Negatif olmayan tam sayı için daha iyi bir regexp?

cevap

5

Sizin regex: @^(?:[1-9][0-9]*)|[email protected]

  1. 1-9 ile herhangi bir rakamı 0 veya kez daha VEYA
  2. maçı 0 ile sona bu numaraları takip başlatmak olanlar sayısıyla aynı söylüyor.

Açıkça -0 durum 2'yi karşılar, böylece eşleşirsiniz.

ihtiyacınız regex geçerli: 0 veya 0 lider olmadan başka +ve numarasıyla eşleşen @^(?:[1-9][0-9]*|0)[email protected]

. Öncelikli 0'lara izin verilirse, kontrol etmeniz gereken tek şey, giriş için kullanabileceğiniz basamaklar içeriyorsa: ^\d+$ Mark bahseder.

if($input >= 0) 
// $input is non -ve. 
+0

teşekkür:

Ayrıca neden sadece gibi basit bir kontrol yapmak değil! İşe yarıyor. :) –

+0

Ayrıca * bir sıfır ile durum * ile başlar * için kontrol edebilirsiniz, ör. '/^(?! 0) \ d + $/D' (' D 'değiştiricisini unutma!) – salathe