Убедитесь, что строка состоит только из цифр и имеет одно десятичное число после хотя бы одной цифры, а после периода разрешено до 3 цифр - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь создать шаблон reg ex для соответствия строке, которая имеет по крайней мере одно число и самое большее два числа перед необязательной десятичной точкой, и если десятичная точка включена, их должно быть по крайней мере от одной до трех цифр вбольшинство после него.

Например, следующие значения должны проверяться.

0
0.0
0.00
0.000
00
00.0
00.00
00.000

Следующее значение не должно проверяться.

0.
00.
0.0000
00.0000

Вот мой код до сих пор

function check($string){
    if(preg_match('/^[0-9][0-9]?(?:\.[0-9]{1,3})$/', $string)){
        return true;
    } else {
        return false;
    }
}

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Вы можете использовать более простое регулярное выражение.

<?php 

$tests = [  '0',
            '0.0',
            '0.00',
            '0.000',
            '00',
            '00.0',
            '00.00',
            '00.000',
            '0.',
            '00.',
            '0.0000',
            '00.0000'
        ];


$regex_pattern = '/^\d{1,2}(\.\d{1,3})?$/';

foreach($tests as $each_test){
    echo $each_test," -----------> ",var_dump(1 === preg_match($regex_pattern,$each_test)),"<br/>";
}

ВЫХОД:

0 -----------> bool(true) 
0.0 -----------> bool(true) 
0.00 -----------> bool(true) 
0.000 -----------> bool(true) 
00 -----------> bool(true) 
00.0 -----------> bool(true) 
00.00 -----------> bool(true) 
00.000 -----------> bool(true) 
0. -----------> bool(false) 
00. -----------> bool(false) 
0.0000 -----------> bool(false) 
00.0000 -----------> bool(false) 
0 голосов
/ 04 октября 2018

'/^\d{1,2}(\.\d{1,2})?$/' - это именно тот шаблон, который вы ищете.

Но во многих случаях полезно написать функцию, которая делает вещи красивыми, аккуратными и простыми на случай, если вы захотите расширить идею

function OptionalDecimal($numstr) {
//use string count to check for the times decimal points appears in the string
if (substr_count($numstr,".") == 0) {
    if(preg_match('/^\d{1,2}$/', $numstr)) return 'true';
}
if (substr_count($numstr,".") == 1) {
    if(preg_match('/^\d{1,2}\.\d{1,2}$/', $numstr)) return 'true';
}
return 'false';
}

echo OptionalDecimal("4.7");

Эта функция делает то же самое

0 голосов
/ 04 октября 2018

Вы можете использовать это регулярное выражение

^[0-9]{1,2}(?:\.[0-9]{1,3})?$

синоним со знаком группы \d

^\d{1,2}(?:\.\d{1,3})?$

...