3 回答

TA貢獻1828條經驗 獲得超3個贊
出生日期匹配:
如果您想驗證出生日期格式(假設[D]D/[M]M/YY[YY],日和月可能為單位數字值),您可以按如下方式執行:
// This would match for any numbers:
if (preg_match('~^\d{1,2}/\d{1,2}/\d{2}(\d{2})?$~', $var)) {
// proceed with valid date
} else {
// protest much
}
在這里,我們使用^和$錨點(用于主題的^開頭和$結尾)來斷言主題$var必須只是這個(而不是包含它):[D]D/[M]M/YY[YY],或 1-2 位數字、斜杠、1-2 位數字、斜杠、2 或 4數字(注意(\d{2})?可選匹配)。
人們可以進一步調整正則表達式以匹配可接受的數字范圍,但我相信現在就可以了。而是在后期處理中檢查范圍;您可能希望將其轉換為時間戳(可能帶有strtotime)和/或 SQL 日期時間,以便在任何情況下進一步使用。
您可以做的另一件方便的事情是立即捕獲日期部分。在以下示例中,為了清楚起見,我們使用命名捕獲組:
if (preg_match('~^(?<day>\d{1,2})/(?<month>\d{1,2})/(?<year>\d{2}(\d{2})?)$~', $var, $date)) {
var_dump($date); // see what we captured.
} else {
// nothing to see here, except a protest.
}
請注意包含匹配項的變量如何$date從條件檢查行繼續進行。您可以一步完成驗證和解析,耶!結果(假設 20/02/1980 輸入):
array(8) {
[0] · string(10) "20/02/1980" // this is the complete subject
["day"] · string(2) "20"
[1] · string(2) "20"
["month"] · string(2) "02"
[2] · string(2) "02"
["year"] · string(4) "1980"
[3] · string(4) "1980"
[4] · string(2) "80" // this will only appear for 4-digit years
}
(非)匹配任何字符:
“我想使用 PHP 檢查變量是否包含小寫字母、下劃線或連字符以外的任何內容”。就這么簡單:
if (preg_match('~[^a-z_-]~', $var)) {
// matches something other than a-z, _ and -
} else {
// $var only has acceptable characters
}
這里^運算符對字符范圍取反(僅在 內部[],否則是主題的開始)。如果您想進行肯定檢查(例如有#、&、X),只需preg_match('~[#&X]~', $var). 花一點時間理解正則表達式是值得的。我仍然經常轉向RegularExpressions.Info來刷新記憶或研究如何實現更復雜的表達式,但是還有大量其他資源??鞓反钆?,

TA貢獻1865條經驗 獲得超7個贊
這是一個很好的用例,只需使用strstr()
strstr — 查找字符串的第一次出現
if (!strstr($a, '-')) {
// No hyphen in $a
}

TA貢獻1786條經驗 獲得超11個贊
您可以嘗試使用這樣的正則表達式:
if (preg_match('#[0-9/]#', $myvariable)) {
//Do something
}
- 3 回答
- 0 關注
- 177 瀏覽
添加回答
舉報