(Bilinen) ulusal formatta ondalık sayı doğrulamak

4 Cevap php

PHP numaralarını doğrulamak için birçok yerleşik işlevleri vardır ama onlar tüm computer biçiminde girişi bekliyoruz: 1234.56. Ben birlikte bazı tipik nitelikleri (kabul aralık, ondalık maksimum sayıda, vb) ile, 1,234.56 (İngilizce) veya 1.234,56 (İspanyolca) gibi şeyler doğrulamak gerekir.

Ben kendi işlevini yazmaya başladım ama yakında kayboldum. Bu bir şamandıra değişken içine read kullanıcı girişi kolay ama ben 1,23456.7 veya 1..25 gibi geçersiz formatları ile numaralarını tespit edebilmek istiyorum.

Eğer konu ile ilgili herhangi bir tavsiye var mı?

(Üç Ondalık ve bin karakterler önceden bilinen ve sabit kod haneli gruplara tamam kapsayacak şekilde gerek yok Indian number format.)

4 Cevap

Sen numaralarını doğrulamak için normal ifadeleri kullanabilirsiniz:

$ds = '.'; // Decimal separator
$ts = ','; // Thousand separator

$isValidFloat = preg_match(
    '/^

         # Integer part, one of the two allowed formats:
         # 1) with thousand separator, grouped by 3 digits
         # 2) without thousand separator
         (\d{1,3}(' . preg_quote($ts) . '\d{3})* | \d+)

         # Optional decimal part
         (' . preg_quote($ds) . '\d+)?

    $/x', $string);

Ve böyle bir float dönüştürmek:

$float = (float) strtr($string, array($ts => '', $ds => '.'));

Verilen çözümlere ek olarak, ben numaraları doğrulamak için PEAR Validation package öneririz.

İşte onların sitesinden bir örnek:

<?php
require_once 'Validate.php';

$number = '-8,1';
if (Validate::number($number,
    array('decimal' => '.,', 'min' => -9, 'max' => -7 ))) {
    echo 'Valid';
} else {
    echo 'Invalid';
}

Eğer biçimine sıkı olmak istiyorsanız o zaman (siz yapmış) bir float olarak ayrıştırmak ve sonra kabul biçimleri içine number_format çıkışına şamandıra kullanır ve orijinal maç çalışın Eğer oluşturulan olanlardan herhangi birine karşı biçimi.

Tüm hesaplamalar ve sonuç değişkeni için, size kendi ihtiyaçlarına göre biçimlendirmek için yerleşik bir işlevi number_format kullanabilirsiniz.