0

実際には2つの質問がありますが、ほとんど同じです。

いいえ1、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
}

上記のコードがすべての点で間違っていることはわかっていますが、私が達成したいことをお見せしようとしています

前もって感謝します

4

3 に答える 3

0

生年月日の一致:

生年月日の形式を確認する場合 ([D]D/[M]M/YY[YY]日と月が 1 桁の値であると仮定)、次のように実行できます。

// 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
}

ここでは、(件名の最初と最後に)^$アンカーを使用して、件名が(含めるのではなく) 、または 1 ~ 2 桁、スラッシュ、1 ~ 2 桁、スラッシュ、2 または 4のみである必要があることを主張します。数字 (オプションの一致に注意してください)。^$$var[D]D/[M]M/YY[YY](\d{2})?

正規表現をさらに調整して、許容範囲の数値に一致させることもできますが、今のところはこれで十分だと思います。むしろ、後処理の範囲を確認してください。いずれにせよ、今後使用するために、おそらくこれをタイムスタンプ (おそらく を使用strtotime) および/または SQL 日時に変換することをお勧めします。

もう 1 つの便利な方法は、日付コンポーネントをすぐに取得することです。次の例では、わかりやすくするために名前付きキャプチャ グループを使用しています。

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一致を含む変数が条件付きチェック行からどのように続くかに注目してください。1 回の操作で検証と解析を行うことができます。結果 (1980 年 2 月 20 日入力と仮定):

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にたどり着くことがよくありますが、他にもたくさんのリソースがあります。ハッピーマッチング、

于 2020-07-06T20:16:00.097 に答える