簡體   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