PHP: String printf ile biçimlendirme

3 Cevap php

Ben biçimlendirilmemiş bir ISRC kodunu almak ve gerektiğinde tirelemesini eklemek için hızlı bir dize biçimlendirme rutin yazmaya çalışıyorum.

Örneğin, ISRC USMTD9203901 US-MTD-92-03901 çevirmek gerekir. Desen:

[A-Z]{2}-[A-Z]{3}-[0-9]{2}-[0-9]{5}

Ben substr ile bu uygulamaya çalışıyorlar ve bu kod aşağıdaki bloğu üretti:

function formatISRC($isrc) {
    $country = substr($isrc, 0, 2);
    $label = substr($isrc, 2, 3);
    $year = substr($isrc, 5, 2);
    $recording = substr($isrc, 7);
    return $country.'-'.$label.'-'.$year.'-'.$recording;
}

Bundan daha dize manipülasyon gerçekleştirerek daha verimli bir yolu olmalı eminim.

3 Cevap

Bu deneyebilirsiniz:

preg_replace(
    "/([A-Z]{2})([A-Z]{3})([0-9]{2})([0-9]{5})/",  // Pattern
    "$1-$2-$3-$4",                                 // Replace
    $isrc);                                        // The text

Sen tarafından desen grubu yakalamak '(' ve ') sonra yerine de grubunu kullanın.

  1. Filtre & girişini kontrol
  2. Tamam girdi ve getiri yeniden biçimlendirmek

Bir şey seviyor ve:

function formatISRC($isrc) {
    if(!preg_match("/([A-Z]{2})-?([A-Z]{3})-?([0-9]{2})-?([0-9]{5})/", strtoupper($isrc), $matches)) {
        throw new Exception('Invalid isrc');
    }    

// $matches contains the array of subpatterns, and the full match in element 0, so we strip that off.
    return implode("-",array_slice($matches,1));
}