我实际上有两个问题,但是它们几乎是同一件事。
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来检查变量是否包含非小写字母,下划线或连字符的内容,我也知道我可以使用{{1} },但是如果我不能继续做这样的事情
strpos()
如果我尝试执行上述操作,则需要很长时间才能完成此页面 所以有办法我可以做到这一点
if (strpos($my_variable, "/")) {
//redirect
} else {
if (strpos($my_variable, "?")) {
//redirect
} else {
if (strpos($my_variable, "$")) {
//redirect
} else {
//do something
}
}
}
我知道上面的代码在所有方面都是错误的,但我只是想向您展示我想要实现的目标
预先感谢
答案 0 :(得分:0)
您可以尝试使用以下正则表达式:
if (preg_match('#[0-9/]#', $myvariable)) {
//Do something
}
答案 1 :(得分: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
}
这里,我们使用^
和$
锚点(对于主题的^
开始和$
结束)来断言主题$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
变量是如何从条件检查行进行的。您可以一口气验证并解析,是的!结果(假设输入为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来刷新内存或研究如何实现更复杂的表达式,但是这里还有许多其他资源。匹配愉快,
答案 2 :(得分:0)