0

我实际上有两个问题,但它们几乎是一回事。

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
}

我知道上面的代码在所有方面都是错误的,但我只是想向您展示我想要实现的目标

提前致谢

4

3 回答 3

0

你可以试试这样的正则表达式:

if (preg_match('#[0-9/]#', $myvariable)) {
    //Do something
}
于 2020-07-06T18:45:52.147 回答
0

这是一个很好的用例,可以简单地使用strstr()

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

if (!strstr($a, '-')) {
  // No hyphen in $a
}
于 2020-11-24T21:57:51.363 回答
0

出生日期匹配:

如果要验证出生日期格式(假设[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
}

在这里,我们使用^and$锚点(用于主题的^开头和$结尾)来断言主题$var只能是this(而不是包含它)[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包含匹配项的变量如何从条件检查行继续执行。您可以一步验证和解析,耶!结果(假设 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 回答