Skip to content

trim

移除字符串開頭和結尾的空白字符。

基礎用法

typescript
import { trim } from 'radash'

console.log(trim('  hello world  '))    // 'hello world'
console.log(trim('\t\nhello\n\t'))      // 'hello'
console.log(trim('hello'))              // 'hello'
console.log(trim('   '))                // ''

語法

typescript
function trim(str: string): string

參數

  • str (string): 要處理的字符串

返回值

返回移除開頭和結尾空白字符的字符串。

示例

基本空白字符移除

typescript
import { trim } from 'radash'

console.log(trim('  hello world  '))    // 'hello world'
console.log(trim('hello world'))        // 'hello world'
console.log(trim('  hello  world  '))   // 'hello  world'
console.log(trim('hello'))              // 'hello'

處理不同類型的空白字符

typescript
import { trim } from 'radash'

// 空格
console.log(trim('   hello   '))        // 'hello'

// 制表符
console.log(trim('\thello\t'))          // 'hello'

// 換行符
console.log(trim('\nhello\n'))          // 'hello'

// 回車符
console.log(trim('\rhello\r'))          // 'hello'

// 混合空白字符
console.log(trim('\t\n hello \n\t'))    // 'hello'
console.log(trim(' \t\nhello\n\t '))    // 'hello'

處理邊界情況

typescript
import { trim } from 'radash'

// 空字符串
console.log(trim(''))                   // ''

// 只有空白字符
console.log(trim('   '))                // ''
console.log(trim('\t\n'))               // ''
console.log(trim(' \t\n '))             // ''

// 沒有空白字符
console.log(trim('hello'))              // 'hello'
console.log(trim('hello world'))        // 'hello world'

處理特殊字符

typescript
import { trim } from 'radash'

console.log(trim('  hello@world  '))    // 'hello@world'
console.log(trim('  hello#world  '))    // 'hello#world'
console.log(trim('  hello$world  '))    // 'hello$world'
console.log(trim('  hello%world  '))    // 'hello%world'
console.log(trim('  hello^world  '))    // 'hello^world'
console.log(trim('  hello&world  '))    // 'hello&world'

處理數字和符號

typescript
import { trim } from 'radash'

console.log(trim('  123  '))            // '123'
console.log(trim('  3.14  '))           // '3.14'
console.log(trim('  -42  '))            // '-42'
console.log(trim('  +100  '))           // '+100'

處理中文和特殊字符

typescript
import { trim } from 'radash'

console.log(trim('  你好世界  '))        // '你好世界'
console.log(trim('  Hello 世界  '))     // 'Hello 世界'
console.log(trim('  🌟hello🌟  '))      // '🌟hello🌟'
console.log(trim('  🎉🎊  '))           // '🎉🎊'

處理HTML內容

typescript
import { trim } from 'radash'

console.log(trim('  <div>hello</div>  ')) // '<div>hello</div>'
console.log(trim('  <p>Hello World</p>  ')) // '<p>Hello World</p>'
console.log(trim('  <span>  content  </span>  ')) // '<span>  content  </span>'

處理JSON字符串

typescript
import { trim } from 'radash'

const jsonStr = '  {"name": "Alice", "age": 25}  '
console.log(trim(jsonStr)) // '{"name": "Alice", "age": 25}'

const prettyJson = `
  {
    "name": "Alice",
    "age": 25
  }
`
console.log(trim(prettyJson)) // '{\n    "name": "Alice",\n    "age": 25\n  }'

處理SQL查詢

typescript
import { trim } from 'radash'

const sqlQuery = `
  SELECT name, age
  FROM users
  WHERE age > 18
`
console.log(trim(sqlQuery)) // 'SELECT name, age\n  FROM users\n  WHERE age > 18'

處理配置文件內容

typescript
import { trim } from 'radash'

const configContent = `
  server:
    host: localhost
    port: 3000
  database:
    url: postgresql://localhost:5432/mydb
`
console.log(trim(configContent)) // 'server:\n    host: localhost\n    port: 3000\n  database:\n    url: postgresql://localhost:5432/mydb'

處理用戶輸入

typescript
import { trim } from 'radash'

function processUserInput(input: string) {
  const trimmed = trim(input)
  
  if (trimmed === '') {
    return '輸入不能為空'
  }
  
  return `處理後的輸入: "${trimmed}"`
}

console.log(processUserInput('  hello world  ')) // '處理後的輸入: "hello world"'
console.log(processUserInput('   ')) // '輸入不能為空'
console.log(processUserInput('hello')) // '處理後的輸入: "hello"'

處理表單數據

typescript
import { trim } from 'radash'

function validateFormData(data: Record<string, string>) {
  const errors: string[] = []
  const cleaned: Record<string, string> = {}
  
  for (const [key, value] of Object.entries(data)) {
    const trimmed = trim(value)
    cleaned[key] = trimmed
    
    if (trimmed === '') {
      errors.push(`${key} 不能為空`)
    }
  }
  
  return { cleaned, errors }
}

const formData = {
  name: '  Alice  ',
  email: '  alice@example.com  ',
  phone: '   ',
  address: '  Beijing, China  '
}

const result = validateFormData(formData)
console.log(result)
// {
//   cleaned: {
//     name: 'Alice',
//     email: 'alice@example.com',
//     phone: '',
//     address: 'Beijing, China'
//   },
//   errors: ['phone 不能為空']
// }

處理API響應

typescript
import { trim } from 'radash'

function processApiResponse(response: any) {
  return {
    message: trim(response.message || ''),
    data: response.data,
    status: response.status
  }
}

const apiResponse = {
  message: '  Success  ',
  data: { id: 1, name: 'Alice' },
  status: 200
}

const processed = processApiResponse(apiResponse)
console.log(processed) // { message: 'Success', data: { id: 1, name: 'Alice' }, status: 200 }

處理文件內容

typescript
import { trim } from 'radash'

function processFileContent(content: string) {
  const lines = content.split('\n')
  const trimmedLines = lines.map(line => trim(line))
  const nonEmptyLines = trimmedLines.filter(line => line !== '')
  
  return nonEmptyLines.join('\n')
}

const fileContent = `
  line 1
    line 2
  line 3

  line 4
`

const processed = processFileContent(fileContent)
console.log(processed)
// line 1
// line 2
// line 3
// line 4

處理CSV數據

typescript
import { trim } from 'radash'

function processCSVLine(line: string) {
  const columns = line.split(',')
  return columns.map(column => trim(column))
}

const csvLine = '  Alice  ,  25  ,  alice@example.com  '
const processed = processCSVLine(csvLine)
console.log(processed) // ['Alice', '25', 'alice@example.com']

處理查詢參數

typescript
import { trim } from 'radash'

function parseQueryString(queryString: string) {
  const params = new URLSearchParams(queryString)
  const result: Record<string, string> = {}
  
  for (const [key, value] of params.entries()) {
    result[key] = trim(value)
  }
  
  return result
}

const queryString = 'name=  Alice  &email=  alice@example.com  &age=  25  '
const parsed = parseQueryString(queryString)
console.log(parsed) // { name: 'Alice', email: 'alice@example.com', age: '25' }

處理環境變量

typescript
import { trim } from 'radash'

function getEnvVar(key: string, defaultValue = '') {
  const value = process.env[key] || defaultValue
  return trim(value)
}

// 模擬環境變量
process.env.API_URL = '  https://api.example.com  '
process.env.DATABASE_URL = '  postgresql://localhost:5432/mydb  '
process.env.SECRET_KEY = '  my-secret-key  '

console.log(getEnvVar('API_URL')) // 'https://api.example.com'
console.log(getEnvVar('DATABASE_URL')) // 'postgresql://localhost:5432/mydb'
console.log(getEnvVar('SECRET_KEY')) // 'my-secret-key'
console.log(getEnvVar('NON_EXISTENT', 'default')) // 'default'

處理日志消息

typescript
import { trim } from 'radash'

function formatLogMessage(level: string, message: string, context?: any) {
  const trimmedMessage = trim(message)
  const timestamp = new Date().toISOString()
  
  return {
    timestamp,
    level,
    message: trimmedMessage,
    context
  }
}

const logEntry = formatLogMessage('INFO', '  User login successful  ', { userId: 123 })
console.log(logEntry)
// {
//   timestamp: '2023-12-31T12:00:00.000Z',
//   level: 'INFO',
//   message: 'User login successful',
//   context: { userId: 123 }
// }

處理模板字符串

typescript
import { trim } from 'radash'

function processTemplate(template: string, data: Record<string, any>) {
  const processedTemplate = trim(template)
  
  return processedTemplate.replace(/\{\{(\w+)\}\}/g, (match, key) => {
    const value = data[key] || ''
    return trim(String(value))
  })
}

const template = `
  Hello {{name}},
  Welcome to {{company}}!
`

const data = {
  name: '  Alice  ',
  company: '  Tech Corp  '
}

const result = processTemplate(template, data)
console.log(result)
// Hello Alice,
// Welcome to Tech Corp!

處理多行文本

typescript
import { trim } from 'radash'

function processMultilineText(text: string) {
  const lines = text.split('\n')
  const trimmedLines = lines.map(line => trim(line))
  const nonEmptyLines = trimmedLines.filter(line => line !== '')
  
  return nonEmptyLines.join('\n')
}

const multilineText = `
  Line 1
    Line 2
  Line 3

  Line 4
`

const processed = processMultilineText(multilineText)
console.log(processed)
// Line 1
// Line 2
// Line 3
// Line 4

注意事項

  1. 空白字符: 移除空格、制表符、換行符、回車符等
  2. 只處理兩端: 只移除開頭和結尾的空白字符,中間的空白字符保留
  3. 空字符串: 空字符串或只有空白字符的字符串會返回空字符串
  4. 不可變性: 返回新字符串,不修改原字符串
  5. 性能: 處理操作很快,適合頻繁使用

與其他方法的區別

  • String.trim(): 原生方法,功能相同
  • trim(): radash提供的字符串修剪方法
  • trimStart(): 只移除開頭的空白字符
  • trimEnd(): 只移除結尾的空白字符

實際應用場景

  1. 用戶輸入處理: 清理用戶輸入的前後空白
  2. 表單驗證: 驗證表單字段是否為空
  3. 文件處理: 清理文件內容的前後空白
  4. API處理: 清理API響應中的字符串
  5. 配置處理: 清理配置文件中的值

Released under the MIT License.