繁体   English   中英

PHP检测可变长度字符串包含1以外的任何字符

[英]PHP detect variable length string contains any character other than 1

使用PHP时,有时会出现如下所示的字符串:

  • 111
  • 110
  • 011
  • 1111
  • 0110012

确定字符串是否包含除字符1 任何 其他字符的最有效方法(最好是不使用正则表达式)是什么?

这是可以放在条件等中的单行代码解决方案:

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

它去除“ 1”并查看是否还有剩余。

用户不要恐慌评论说str_replace可以用trim代替:

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

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


您也可以使用字符串,例如字符数组,并从头开始遍历直到找到不是=='1'的字符(在这种情况下,返回true)或到达数组的末尾(在这种情况下,返回return假)。


最后,虽然OP这里说的“最好不用正则表达式,”别人开的正则表达式可以使用一个:

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

另一种方法是:

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还有其他数字。

另一个选择是将字符串像符号数组一样对待,并检查是否为非1 如果是-打破for循环:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM