2010-07-25 1 views
1
// create a string 
$string = '+7'; 

// try to match the beginning of the string 
if(preg_match("{-15 to +12}", $string)) 
    { 
    // if it matches we echo this line 
    return {strip all the + sign} 
    echo 'its a valid gmt time'; 
    } 
else 
    { 
    echo 'not valid gmt time'; 
    } 

Вопрос:проверить время GMT смещение и полоса с регулярным выражением?

  1. смотрите первый {} на preg_match, как мы можем сделать это? im new on regex, и я просто не знаю, с чего начать

  2. на втором {} можно ли как-то сломать знак +, используя регулярное выражение?

  3. - это диапазон gmt? -14 до +12 (ну вот что я вижу на http://www.php.net/manual/en/timezones.others.php)

Благодаря

+1

Какой формат вы ждете? – quantumSoup

+1

Должно ли вы использовать регулярное выражение? Знак '+' требуется? – kennytm

+0

@Aircule, что вы подразумеваете под форматом? извините новичок: | , @kennttm есть лучшее решение без регулярного выражения? – 2010-07-25 16:12:23

ответ

1
function validGMT($input) 
{ 
    $gmt = '/^(?:\+?(?:[0]?[0-9]|[1][0-2])|-(?:[0][0-9]|[1][0-4]))$/'; 
    if (preg_match($gmt, $input)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    }  
} 

редактировать *

ив только заметить, что если вы на php5. 2. сделать это

$val='-2'; 
$options['options']['min_range'] = -14; 
$options['options']['max_range'] = 12; 
$var1 = filter_var($val, FILTER_VALIDATE_INT,$options); 
var_dump($var1); 
+2

'[0]' может быть выражено только с '0'. – Gumbo

+0

Gumbo вы можете объяснить это больше? +1 –

+3

'[...]' означает * один из символов, выраженный символом '...' *. Теперь, если «...» является всего лишь одним символом, как в этом случае «0», более просто написать '0' вместо' [0] '. – Gumbo

0

Здесь я пойти:

  1. // матч 0-15 с +, - впереди ,

    if(preg_match("/(+|-)([0-9]|1[1-5])/", $string)){ 
         //match process here 
    } 
    

Это будет соответствовать вашим -15, + 12 я бы себе представить.

  1. Чтобы снять все знаки {+}.

    // вынуть + и заменить на + $ newString = str_replace (array ("+"), "", $ oldString);

0

Регулярное выражение может быть:

/\+?[0-9]|\+?1[0-2]|\-[1-9]|\-1[0-5]/ 

Это будет соответствовать 0..12, +0 .. + 12, -1 ..- 15
Если требуется знак +, использование RegExp без?.

затем просто сделать str_replace на номер:

$number = str_relace('+', '', $number); 
+0

есть два + один? – 2010-07-25 16:21:10

+0

btw это не возвращает true, если 10 11 или +10 +11, -10 -11 (два десятичных знака.) Im пытается это на http://gskinner.com/RegExr/ – 2010-07-25 16:44:55

0

Я хотел бы сделать:

preg_match("/^([+-]\d+)/", $string, $m); 
if(isset($m[1]) && $m[1] > -16 && $m[1] < 13) { 
    echo 'its a valid gmt time'; 
} else { 
    echo 'not valid gmt time'; 
} 
+0

hmm не знаю, но это дает мне неопределенное смещение : 1 в строке 2 –

+0

Просто проверьте результат preg_match или test if (isset ($ m [1])) ... – Toto

1
$string = '+7'; 
if (in_array($string, range(-15, 12))) { 
    echo 'its a valid gmt time'; 
} else { 
    echo 'not valid gmt time'; 
} 
+0

протестирован и отлично работает :) –

Смежные вопросы