php刪除字符串兩邊的空白符:trim()、ltrim()、rtrim()

2020-12-07 青石野草

1. 基本概念

在現實中的很多情況下,我們都需要先清除一個字符串左右兩邊的空白字符,然後再使用它。比如我們要求用戶在網頁中的一個輸入框中輸入他的手機號,當用戶輸入的字符串被提交到服務端後,我們需要驗證它是否符合正確的手機號格式。但是用戶可能在手機號的左邊或右邊不小心輸入了空格;為了更好的用戶體驗,我們在服務端先自動清除該字符串左右兩邊的空格再進行格式匹配,而不是直接告訴用戶他的輸入是錯誤的。

php已經為我們提供了實現這一功能的函數,那就是trim()函數。英文單詞trim有「修剪、切除」的意思,在這裡要表達的就是在字符串的左右兩邊進行刪除。trim()函數不但能刪除空白符,還可以刪除其它任意字符,只要你在它的第二個參數中指明了你想要刪除的那些字符即可。

還有兩個和trim()函數很相近的函數,ltrim()和rtrim()。ltrim第一個字母l表示left,即它只刪除字符串左邊的空白符或其它字符。rtrim的第一個字母r表示right,即它只刪除字符串右邊的空白符或其它字符。調用trim()等於同時調用ltrim()和rtrim()。

2. 語法

2.1 函數原型

這三個函數的原型如下所示:

2.2 參數

其中$str是待處理的字符串,而$char_mask則指明你想要刪除哪些字符。$char_mask是一個可選的參數,當它被省略的時候,這3個函數都默認刪除以下這些空白符:

" ",空格符(ASCII碼32);

"\t",制表符(ASCII碼9);

"\n",換行符(ASCII碼10);

"\r",回車符(ASCII碼13);

"\0",空字符(ASCII碼0);

"\x0B",垂直制表符(ASCII碼11)。

在$char_mask參數中,還可以使用..來指定一個字符範圍。比如我想要刪除a至z的所有字符,那麼可以將$char_mask指定為"a..z",而不用將a至z的每一個字符都書寫一遍。

當用..指定一個字符範圍的時候,開始字符一定不能大於結束字符,否則實際指定的是開始字符、英文句點和結束字符這3個字符,而不是一個字符範圍。此外,這種情況還會產生一條E_WARNING級別的錯誤消息。

2.3 返回值

這3個函數都返回一個新的字符串,它等價於在參數$str的左邊或右邊刪除指定字符後的結果,而原本的參數$str則不變。

2.4 算法原理

這3個函數並不是只刪除某一邊的一個字符,如果字符串最左邊或最右邊的多個字符都是待刪除字符,那麼它們都會被刪去。trim()函數的算法原理等價於下面的步驟:

首先,trim()函數從$str的第1個字符向右搜索,直到遇到第1個不是待刪除字符的字符為止;此時,它得到一個只包含待刪除字符的最左子串。

然後,trim()函數再從$str的最後一個字符起向左搜索,直到遇到第1個不是待刪除字符的字符為止;此時,它得到一個只包含待刪除字符的最右子串。

新建一個字符串,它等於在$str上刪除前兩個步驟中的最左子串和最右子串後的剩餘內容;返回該字符串。

ltrim()和rtrim()函數的原理與此類似,只是它們只在字符串的一邊而不是兩邊進行刪除。

3. 示例

3.1 省略$char_mask參數

以上代碼的執行結果如圖1所示,可以看到$str左右兩邊的空白符都被刪除了,但中間的空白符沒有被刪除。trim()函數執行之後,$str並不會被改變,因為函數用一個新字符串返回了在$str兩邊刪除空白符的結果。

圖1 省略$char_mask參數的情況

3.2 使用$char_mask參數

我們首先使用$char_mask參數來指明我們想刪除其它的字符而非空白符,然後再通過字符範圍的方式來等價地指定這些字符。

該示例的執行結果如圖2所示,可以看到緊挨著待刪除字符的空白符現在沒有被刪除,因為此時空白符已不再屬於要刪除的字符。此外"a..k"等價於"abcdefghijk",且字符範圍還可以和直接指明待刪除字符的方式混合使用,比如"a..gkijh"其實也等價於"abcdefghijk"。

圖2 用$char_mask參數指定要刪除的字符

我們再來測試一下當指明字符範圍的時候開始字符大於結束字符的情況,下面代碼的執行結果如圖3所示。可以看到有一條錯誤消息指明我們在第10行代碼中所指定的字符範圍是錯誤的;其次"d..a"相當於指定的刪除字符是d、.(英文句點)和a這3個,而非一個字符範圍。

圖3 錯誤的字符範圍指定方式的結果

3.3 ltrim()和rtrim()

以上代碼的執行結果如圖4所示,可以看到ltrim()和rtrim()只是在字符串的左邊或右邊進行刪除。

圖4 ltrim()和rtrim()的效果

(完)

相關焦點

  • 從String中移除空白字符的多種方式!?差別竟然這麼大!
    strip() : 刪除字符串開頭和結尾的空格。 trim trim()是Java開發人員最常用的刪除字符串開頭和結尾的空格方法。,除了使用trim、strip以外,還有一個辦法,那就是使用replace方法把其中的空白字符替換掉。
  • Python基礎教程(一) - 序列:字符串、列表和元組
    序列類型操作符成員關係操作符(in、not in):成員關係操作符是用來判斷一個元素是否屬於一個序列的。對於字符串來說就是判斷一個字符是否屬於一個字符串;對於列表和元組,就代表一個對象是否屬於該對象。字符串字符串類型是Python裡面最常見的類型。可以簡單的通過在引號間包含字符的方式創建它,單引號和雙引號是相同的。下面來寫一些例子來展示下如何訪問字符串的值、如何改變和刪除字符串。
  • PHP正則表達式的快速學習方法
    除了我們以上所介紹的元字符之外,正則表達式中還具有另外一種較為獨特的專用字符,即定位符。定位符用於規定匹配模式在目標對象中的出現位置。較為常用的定位符包括: 「^」, 「$」, 「\b」 以及 「\B」。
  • Go語言學習筆記之字符串一
    \ fmt.Println("\nContains函數判斷字符串包含關係:") str4 := "Ajian loves python and goland" fmt.Println(str4) fmt.Println(strings.Contains(str4,"jian")) //Index 函數是返回某字符在字符串的下標,在字符串裡面返回下標,否則-1(註:返回的是首次出現的下標)
  • MySQL字符串截取 和 截取字符進行查詢
    通過mysql自帶的一些字符串截取函數,對數據進行處理,下面是我整理的字符串截取 和 截取字符進行查詢。一、MySQL中字符串的截取MySQL中有專門的字符串截取函數:其中常用的有兩種:substring_index(str,delim,count) 和concat 1.substring_index(str,delim,count) 函數的使用較為普遍。
  • Word怎麼刪除空白頁,由分節符、分頁符、分欄符、表格等導致
    這要看由什麼導致的空白頁,不同的情況刪除方法有些差異,以下列舉了Word怎麼刪除空白頁七種情況,它們分別為由分節符、分頁符、分欄符、自由換行符、段落標記和表格導致的空白頁,具體看實例,實例操作的 Word 版本為 Word 2016。
  • JavaScript字符串-概念
    字符串的概念 概念: 在JavaScript中將所有單引號或雙引號括起來的都叫做字符串 字符串的屬性 1.length; 返回的是當前字符串中字符的個數 例如我們要輸出hello的個數:
  • 10個很棒的 JavaScript 字符串技巧
    我們稱一個字符序列為字符串。這幾乎是所有程式語言中都有的基本類型之一。這裡跟大家展示關於 JS 字符串的10個很棒的技巧,你可能還不知道哦?1.如何多次複製一個字符串JS 字符串允許簡單的重複,與純手工複製字符串不同,我們可以使用字符串的repeat方法。2. 如何填充一個字符串到指定的長度有時,我們希望字符串具有特定長度。
  • JavaScript字符串 - 查找方法
    字符串查找的方法子字符串代表的就是要查找的字符串1.indexOf();格式:字符串.indexOf( 子字符串串,開始查找的位置 );返回值:如果在字符串中查找到了子字符串第一次出現的位置,返回子字符串出現的位置,否則沒有查找到返回 -
  • php基礎通關大挑戰,看看你能過幾關!
    繼續上一節的內容,通過試題的方式查缺補漏,看看你的php基礎知識還有哪些漏洞!1.在php中,以下代碼列印的結果是?<?php$RESULT =11+011+0x11;echo "$RESULT";?
  • 在JavaScript字符串的search()方法中,如何匹配正則表達式?
    然後再拿具體的字符串來與這個模式進行匹配,如果匹配上,則表示符合要求,則進一步採用措施。第二節:正則表達式特點正則表達式是由字符串組成的。正則表達式只是一種搜索模式或匹配模式。對於具體的字符串,需要經過正則表達式的計算後,形成一個值來判斷是否匹配上。正則表達式可簡單,可複雜,需要根據語法定義模式。
  • Python中去除字符串首尾空格、特殊字符和指定子字符串的方法
    第七十七節:去除字符串中的空格和特殊字符字符串在實際應用中,有很多情況是默認去除字符串首尾的空格狀態,去除幾個比較特殊的字符的。這幾個特殊的字符是:換行符「\n」、回車符「\r」、制表符「\t」。;使用print()函數輸出字符串時,其中的特殊字符「\n、\r、\t」則被默認為命令執行了;使用strip()方法,只能去除字符串首尾的空格和特殊字符,存在於字符串中間的空格和特殊字符是無法去除的。
  • 用Python拼接字符串的常用方法及性能分析
    常見的字符串拼接方式「+」操作符拼接「+」操作符連接字符串是Python中比較經典的字符串拼接方式。可以使用「+」將兩個字符串直接進行拼接。同時,它可以自主判斷是進行加法操作還是拼接字符串操作,當對字符串和數值型數據(整形、浮點型)進行拼接時,會拋出TypeError異常。
  • LABVIEW編程之時間標識轉換為字符串
    在定時函數選板中,LABVIEW提供了許多的時間類相關函數,包括時間、日期轉換為字符串函數,實際上格式化寫入字符串函數完全支持時間標識,其轉換功能更多、更全面。與數值轉換為字符串類似,時間標識轉換為字符串的關鍵也是格式化字符串,LABVIEW提供了許多專門的時間相關的時間格式代碼,這些格式符不僅僅可以用來轉化為字符串,同時也可以時間標識控制項進行特色顯示,以下的例程中將同時利用字符串和時間標識顯示控制項顯示我們需要的時間日期。
  • C語言字符集由字母,數字,空格,標點和特殊字符組成
    6.標誌符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。書寫程序時應遵循的規則從書寫清晰,便於閱讀,理解,維護的角度出發,在書寫程序時應遵循以下規則:1.一個說明或一個語句佔一行。
  • 按任意符號間隔拆分字符串的函數
    大家好,我們今日講解「VBA信息獲取與處理」教程中第十四個專題「Split函數提取數據信息的深入講解」的第二節「按任意符號間隔拆分字符串的函數」,這個專題是非常實用的知識點,希望大家能掌握利用。在整個字符串的所有字符間建立一個循環,同時再在間隔符號字符串間建立一個循環,同時每次截取1個字符,當兩個字符相同時,我們將獲取一段段的字符,這些字符就是我們要取得的結果。我們可以把上述的思路放在一個函數中實現,我們命名為SplitA函數。
  • MySQL拼接字符串,GROUP_CONCAT 值得擁有
    主角閃亮登場GROUP_CONCAT(expr)在 Mysql 官方文檔 中,該函數被放在聚合函數章節,如果你要按照指定欄位分組拼接,就要配合關鍵字GROUP BY來使用的定義該函數返回一個字符串結果,該字符串結果是通過分組串聯的非NULL值。如果沒有非NULL值,則返回NULL。完整語法如下:What?