是否可以在if语句中使用通配符?
我的代码:
*
=通配符
if ($admin =='*@some.text.here') {
}
$admin
将是其中之一:
答案 0 :(得分:14)
如果您不想使用正则表达式,fnmatch()
可能会为此[有限]的目的提供帮助。它使用像您期望的类似shell的通配符来匹配字符串。
if (fnmatch('*@some.text.here', $admin)) {
}
答案 1 :(得分:3)
您可以检查字符串是否以您期望的值结束:
$suffix = '@some.text.here';
if (substr($admin, -strlen($suffix)) == $suffix) {
// Do something
}
答案 2 :(得分:3)
这是一个通配符功能。
当您希望使用*
时,我只会注释掉.
(单个字符匹配)。
这将允许您在整个过程中使用通配符:
*xxx
- 结束“xxx”
xxx*
- 开始“xxx”
xx*zz
- 以“xx”开头,以“zz”结尾
*xx*
- 中间有“xx”
function wildcard_match($pattern, $subject)
{
$pattern='/^'.preg_quote($pattern).'$/';
$pattern=str_replace('\*', '.*', $pattern);
//$pattern=str_replace('\.', '.', $pattern);
if(!preg_match($pattern, $subject, $regs)) return false;
return true;
}
if (wildcard_match('*@some.text.here', $admin)) {
}
但我建议您自己学习regular expressions和preg_match()
。
答案 3 :(得分:1)
if (strstr ($admin,"@some.text.here")) {
}
使用strstr()它会做你想要的或者指出stristr()
或者你可以使用类似这样的strpos
$pos = strrpos($mystring, "@some.text.here");
if ($pos === false) { // note: three equal signs
// not found...
} else {
//found
}
或者从结束(我认为没有测试过)
$checkstring = "@some.text.here";
$pos = strrpos($mystring, $checkstring, -(strlen($checkstring)));
if ($pos === false) { // note: three equal signs
// not found...
} else {
//found
}
答案 4 :(得分:0)
检查是否在另一个字符串中找到字符串的最快方法是strpos():
if (strpos($admin, '@some.test.here') !== false) { }
如果您需要确定@ some.text.here在最后发生,那么您将需要使用substr_compare()。
if (substr_compare($str, $test, strlen($str)-strlen($test), strlen($test)) === 0) {}