与字符串长度范围条件

问题描述:

我现在有这样的代码:与字符串长度范围条件

if (strlen(trim($username) < 4)) { 
$error='Username should be between 4 and 10 characters.'; 
} 

if (strlen(trim($username) > 10)) { 
$error='Username should be between 4 and 10 characters.'; 
} 

我想降低到一个更简单的语句,像这样的(但显然是行不通的):

if (strlen(trim($username) <4>10))... // parse error 

那么你可以这样做:

(strlen(trim($username)) < 4 || strlen(trim($username)) > 10) && $error='Username should be between 4 and 10 characters.'; 

但它会是一个很多更高效首先定义修剪长度用户名:

$len = strlen(trim($usename)); 
($len < 4 || $len > 10) && $error = "Bad username"; 
+0

为什么'&& '?这是'和'吗? – Alegro

+0

它们基本相同,优先级略有不同。看到这里:http://*.com/questions/2803321/and-vs-as-operator – Madbreaks

+0

ThankYou。解决了 ! – Alegro

此语法不正确,你应该使用||操作:

if (strlen(trim($username)) < 4 || strlen(trim($username)) > 10) { 
    $error='Username should be between 4 and 10 characters.'; 
} 

在这里你去,使用||(或)运算符的帮助。

另请注意,我如何将用户名分配给变量,以防止使用您的多次调用的trim()strlen()函数。这只是浪费。

代码

$username = trim('bob'); 
$username_length = strlen($username); 
if ($username_length < 4 || $username_length > 10) 
{ 
    echo 'Username should be between 4 and 10 characters.'; 
} 
+0

这种代码膨胀是完全不必要的,完全可以避免的。您可能会追求易读性,但是这种折衷和代码通常比代码简洁和评论更难维护。 – Madbreaks

+3

@Madbreaks我明白了你的观点,并且它有一些有效性,但是请记住像这样的例子本质上是冗长的,所以OP可以在不解码隐藏编码标准的情况下从中学习。在像这样的程序代码中,如果没有(如我所说)对一个函数进行多次不必要的调用,真的没有办法少得多。 – phpisuber01

+0

Op *显式*要求*精简*语法 – Madbreaks

你基本上只检查一个数是否在规定范围内,那么另一个选择是filter_var(),虽然有点吓人:

if(!filter_var(strlen(trim($username)), FILTER_VALIDATE_INT, array('options' => array('min_range' => 4, 'max_range' => 10)))) 
{ 
    $error='Username should be between 4 and 10 characters.'; 
} 
+0

谢谢,MrCode。有用的代码,但可能适用于其他情况。 – Alegro

+0

呃,3个函数调用和两个数组创建?我全都想用一种语言提供的工具,但是我们没有责任来平衡这种工具和效率吗?仅仅因为工具的存在并不意味着它是正确的工具。 – Madbreaks

+3

@Madbreaks我还没有测试过这个,但我怀疑这与其他方式相比会有什么性能影响。在性能方面,你应该改进实际上很慢的,而不是已经非常快的。更易读的代码比难读但是微代码更好。事实上,我可能会用简单的if语句来解决这个问题(因此我为什么选择upvoted),但是在这里,看到其他选项总是很好的。 – MrCode