2014-01-28 50 views
1

我有一個表單輸入,用戶可以(在數據庫中存儲)填寫他們的餐廳的開放時間:正則表達式的開放時間 - 按以下格式(天時間)

Fri 12-02, Sat 15-03 

,我需要一個正則表達式來驗證他們的輸入。從評論

更新:
的模式是:
3 character DayOfWeek[space]the opening hour (24 hour)[hyphen]the closing hour (24 hour)

那麼,它的開口小時天( '星期五')和時間(」 12-02「,如12:00至02:00)。它應該拒絕任何不符合理想模式的東西。所以

+0

這是什麼格式?它應該匹配什麼?它應該拒絕什麼? – Ghost

+0

你正在尋找一種方法來驗證前三個字符是在 - 星期一,星期二,星期三,星期四,星期五,星期六,星期日 - 第5和第6個字符在00和24之間,第7個字符是' - '第8和第9個字符是在00和24之間? –

+2

嗯,這是開放時間('星期五')和時間('12 - 02',如12:00至02:00)。它應該拒絕任何不符合理想模式的東西。所以 –

回答

0

常見的正則表達式將在JavaScript

/^[A-Z][a-z]{2}\s\d\d-\d\d/ 

例子:fiddle

在PHP相同的模式:phpfiddle

+0

感謝您的時間vladkras,這就是我一直在尋找! –

+0

@ user2705219,假設它是您輸入中的唯一值,我添加了'^',這意味着「字符串的開始」 – vladkras

0

什麼是有效和無效的BTW?

另外,我們在看什麼領域?文本字段?

我的正則表達式:

/[0-9]{2}-[0-9]{2}/ 

它只是驗證的數字部分(即12-02)和週五,可能會在一個下拉菜單。

如果沒有,/[A-Z][a-z]{2} [0-9]{2}-[0-9]{2}/ ...

注意,這並不驗證實際的數字時間價值,它只是驗證對你的例子格式的格式。

0

很難寫出正確的表達式,正確驗證所有可能的日期格式。將作業留給日期解析器,這是專門爲此目的而編寫的。這裏是你將如何使用DateTime類來實現這一點:

function customValidate($str, $format='D d-m') 
{ 
    // explode the string, remove whitespace 
    list($date1,$date2) = array_map('trim', explode(',', $str)); 

    // parse them into DateTime objects 
    $d1 = DateTime::createFromFormat($format, $date1); 
    $d2 = DateTime::createFromFormat($format, $date2); 

    // check if they're valid 
    $d1f = $d1->format($format) == $date1; 
    $d2f = $d2->format($format) == $date2; 

    // return the boolean result 
    return $d1 && $d2 && $d1f && $d2f; 
} 
+0

這可能會比我最初的想法更好=)謝謝! –

1

只有符合3 letter days,然後[space]然後24hour time然後-然後24hour time

(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s([2][0-4]|[0-1][0-9])-([2][0-4]|[0-1][0-9]) 

比賽:

Fri 12-12 
Sat 23-22 

不匹配:

Jpg 12-12 
Sat 25-22 
2

正則表達式與命名的模式:

/(?P<day>Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:-(?P<today>Mon|Tue|Wed|Thu|Fri|Sat|Sun))?\s+(?P<from>(?<=\s)(?:(?:2[0-3])|(?:[01]?[0-9]))(?:\:[0-5][0-9])?)-(?P<till>(?<=-)(?:(?:2[0-3])|(?:[01]?[0-9]))(?:\:[0-5][0-9])?)/g

http://regex101.com/r/cP8rQ4

它匹配所有這些:「週五12-02,週六15:30-03,12-02星期一,星期一15- 03,週一 - 週四8:30-16:45「,並給你一個帶有指定鍵(天,今天,從,直到)的數組。 爲此,您必須使用preg_match_allPREG_SET_ORDER

輸出示例:

array(
     array(
     'day' => 'Fri', 
     'from' => '12', 
     'till' => '02' 
    ), array(
     'day' => 'Sat', 
     'from' => '15:30', 
     'till' => '03' 
    ), array(
     'day' => 'Mon', 
     'from' => '12', 
     'till' => '02' 
    ), array(
     'day' => 'Mon', 
     'from' => '15', 
     'till' => '03' 
    ), array(
     'day' => 'Mon', 
     'today' => 'Thu', 
     'from' => '8:30', 
     'till' => '16:45' 
    ) 
    ); 

至少IM,如果不知道它是PREG_SET_ORDERPREG_PATTERN_ORDER只是嘗試。

+1

'PREG_SET_ORDER'是您顯示的數組輸出的標誌 – AeroX