PHP检测变量长度字符串包含除1之外的任何字符

时间:2016-04-08 19:15:18

标签: php string

使用PHP我有时会看到如下所示的字符串:

  • 111
  • 110
  • 011
  • 1111
  • 0110012

确定字符串是否包含任何字符其他然后字符validates :shipping_cost, presence: { if: "shipping?", message: 'You forgot the shipping cost.' }, numericality: { greater_than: 100, if: "shipping? and heavy?", message: 'Shipping heavy items is $100 minimum.' } 的最有效方式(最好不使用正则表达式)是什么?

3 个答案:

答案 0 :(得分:6)

这是一个可以放入条件等的单行代码解决方案:

strlen(str_replace('1','',$mystring))==0

它删除“1”并查看是否还有其他内容。

用户Don't Panic评论str_replace可以替换为trim

strlen(trim($mystring, '1'))==0

删除前导和尾随1并查看是否还有剩余内容。这适用于OP请求中的特定情况,但第一个选项也会告诉您您有多少非“1”字符(如果该信息很重要)。根据实现,trim可能运行得稍快,因为PHP不必检查第一个和最后一个非“1”字符之间的任何字符。

您也可以use a string like a character array并从头开始迭代,直到找到不是=='1'的字符(在这种情况下,返回true)或到达数组的末尾(在这种情况下,返回假。)

最后,虽然OP在这里说“最好没有正则表达式”,但是对regexes开放的其他人可能会使用一个:

 preg_match("/[^1]/", $mystring)==1

答案 1 :(得分:2)

另一种方法:

if (base_convert($string, 2, 2) === $string) {
    // $string has only 0 and 1 characters.
}

由于您的$string基本上是二进制数字,因此您可以使用base_convert进行检查。

工作原理:

var_dump(base_convert('110', 2, 2)); // 110
var_dump(base_convert('11503', 2, 2)); // 110
var_dump(base_convert('9111111111111111111110009', 2, 2)); // 11111111111111111111000

如果base_convert的返回值与输入不同,则会在01旁边显示其他字符。

如果您想检查字符串是否只有 1字符:

if(array_sum(str_split($string)) === strlen($string)) {
    // $string has only 1 characters.
}

您使用str_split检索所有单个数字,并将其与array_sum相加。如果结果与字符串的长度不同,那么您在1旁边的字符串中包含其他数字。

答案 2 :(得分:0)

另一种选择是将字符串作为符号数组,并检查不是1的内容。如果是 - 中断for循环:

for ($i = 0; $i < strlen($mystring); $i++) {
   if ($mystring[$i] != '1') {
       echo 'FOUND!';
       break;
   }
}