我已经看到很多php代码执行以下操作来检查字符串是否有效:
$ str是一个字符串变量.
if (!isset($str) || $str !== '') {
// do something
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢这样做
if (strlen($str) > 0) {
// something
}
Run Code Online (Sandbox Code Playgroud)
第二种方法有什么问题可以出错吗?我应该注意哪些铸造问题?
JYe*_*ton 28
if (isset($stringvar) && $stringvar !== '') {
}
Run Code Online (Sandbox Code Playgroud)
empty()
如果要考虑,您还可以添加以消除空格.
编辑:
请注意,对于像' $stringvar !== ''
'这样的字符串,这将返回true,而isset($stringvar)
不会.
Gra*_*ble 14
您需要isset()
以防万一$str
:
if (isset($str) && $str !== '') {
// variable set, not empty string
}
Run Code Online (Sandbox Code Playgroud)
使用!empty()
会有一个重要的警告:字符串'0'
计算结果为false.
此外,有时候人们想要检查,这$str
不是假的,比如false
或null
[1].以前的代码不处理这个问题.这是松散比较可能有用的罕见情况之一:
if (isset($str) && $str != '') {
// variable set, not empty string, not falsy
}
Run Code Online (Sandbox Code Playgroud)
上面的方法很有意思,因为它仍然简洁,不会过滤掉'0'
.但如果您使用它,请确保记录您的代码.
否则,您可以使用此等效但更详细的版本:
if (isset($str) && (string) $str !== '') {
// variable set, not empty string, not falsy
}
Run Code Online (Sandbox Code Playgroud)
当然,如果您确定$str
已定义,则可以省略isset($str)
上述代码.
最后,考虑到这一点'' == false
,'0' == false
但是'' != '0'
,您可能已经猜到了:PHP比较不是传递性的(包括有趣的图形).
[1]注意isset()
已经过滤掉了null
.
这将安全地检查只包含空格的字符串:
// Determines if the supplied string is an empty string.
// Empty is defined as null or containing only whitespace.
// '0' is NOT an empty string!
function isEmptyString($str) {
return !(isset($str) && (strlen(trim($str)) > 0));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51145 次 |
最近记录: |