簡體   English   中英

Preg_replace 字符串

[英]Preg_replace string

我正在根據用戶計費名字和計費姓氏創建用戶名。 這在 WooCommerce 中,盡管我認為 cms 與我的問題無關。

應刪除以下字符:, @ # $ % ^ & * ( ) ~ `。 : ; ' "; ? > < ? / \ |

應刪除任何數字 字符串必須小寫 所有空格都必須替換為連字符。

以下是我嘗試過的:

if(isset($_POST['billing_first_name']))
    $fn = $_POST['billing_first_name'];
$fn = iconv('utf-8', 'us-ascii//TRANSLIT', $fn);
$fn = preg_replace('/[^a-z0-9-]+/', '-', strtolower($fn));
$fn = preg_replace("/-+/", '-', $fn);
$fn = trim($fn, '-');

if(isset($_POST['billing_last_name']))
    $ln = $_POST['billing_last_name'];
$ln = iconv('utf-8', 'us-ascii//TRANSLIT', $ln);
$ln = preg_replace('/[^a-z0-9-]+/', '-', strtolower($ln));
$ln = preg_replace("/-+/", '-', $ln);
$ln = trim($ln, '-');

例子:

fn = Liz & Noël;
ln = John-Evan’s 2nd;
echo $fn . '-' . $ln;

預期結果:liznoel-johnevansnd

計算結果:liz-no-eljohn-evan-s-2nd

您可以使用

<?php

$fn = 'Liz & Noël';
$ln = 'John-Evan’s 2nd';

function process( $str )
{
    $str = iconv('utf-8', 'us-ascii//TRANSLIT', $str);
    $str = strtolower($str);
    return preg_replace('~[^A-Za-z]+~u', '', $str);
}

echo process($fn) . '-' . process($ln);

注意preg_replace('~[^A-Za-z]+~u', '', $str); 從任何 Unicode 字符串中刪除除 ASCII 字母以外的任何字符。 由於連字符出現在兩個名稱部分之間,您不能用連字符替換,您需要使用連接從兩個部分創建字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM