亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

php:檢查變量是否有/缺少特定字符

php:檢查變量是否有/缺少特定字符

PHP
蕪湖不蕪 2023-07-15 15:44:51
我實際上有兩個問題,但它們幾乎是同一件事。no1,我想使用 PHP 來檢查變量是否包含除正斜杠或數字之外的任何內容,我知道我可以用于strpos()此目的,但如果我執行類似的操作if (strpos($my_variable, "/")) {    if (1 === preg_match('~[0-9]~', $string)) {        //do something    }}上面的代碼首先 if 語句檢查變量是否包含正斜杠,然后下一步檢查變量是否包含字母,但是如果有人輸入類似“asdfgfds2345/”的內容作為出生日期,它將通過,因為該字符串包含正斜杠并且數字,但我的 PHP 腳本要做這樣的事情if(/*my_variable contains letters,special characters and any other thing that is not a number or a forward slash*/){ do something}下一個問題:我想使用 PHP 來檢查變量是否包含除小寫字母、下劃線或連字符之外的任何內容,我也知道我可以用于strpos()此目的,但如果我不能繼續做這樣的事情像這樣if (strpos($my_variable, "/")) {    //redirect} else {    if (strpos($my_variable, "?")) {        //redirect    } else {        if (strpos($my_variable, "$")) {            //redirect        } else {            //do something        }    }}如果我嘗試執行上述操作,我將需要很長時間才能完成此頁面,所以有沒有辦法可以做到這一點$chars = "$""#""/""*";if ($myvariable contains any of the letters in $char){    //do something}我知道上面的代碼在所有方面都是錯誤的,但我只是想向您展示我想要實現的目標
查看完整描述

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來刷新記憶或研究如何實現更復雜的表達式,但是還有大量其他資源??鞓反钆?,


查看完整回答
反對 回復 2023-07-15
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

這是一個很好的用例,只需使用strstr()


strstr — 查找字符串的第一次出現


if (!strstr($a, '-')) {

  // No hyphen in $a

}


查看完整回答
反對 回復 2023-07-15
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

您可以嘗試使用這樣的正則表達式:


if (preg_match('#[0-9/]#', $myvariable)) {

    //Do something

}


查看完整回答
反對 回復 2023-07-15
  • 3 回答
  • 0 關注
  • 177 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號