Est-ce que cela doit être une regex? Sinon :
$daysStart = 'Mon,Tues,Wed,mon';
$days = strtolower($daysStart);
$days = explode(",", $days); // séparation par virgule
$days = array_unique($days); // suppression des doublons
$days = implode(",", $days); // recollage avec des virgules
// Comparer la nouvelle chaîne à l'originale :
if(strtolower($days)===strtolower($daysStart )){ /*correspondance*/ }
Cela résulte en une chaîne en minuscules des jours, séparés par des virgules. Je ne suis pas sûr de ce que vous vouliez en sortie, vous pourriez vouloir sauvegarder l'entrée originale dans un autre fichier, ou ucfirst()
les valeurs via un array_map()
ou quelque chose, c'est juste pour vous montrer une autre méthode
Ou mon code plus court :
$daysStart = 'Mon,Tues,Wed,mon';
$days = explode(",", strtolower($daysStart ) );
$days = implode(",", array_unique($days) );
if(strtolower($days)===strtolower($daysStart )){ /*correspondance*/ }
ou fonction (en code court, peut être la version longue bien sûr) :
function checkDays($string){
$days = explode(",", strtolower($string) );
$days = implode(",", array_unique($days) );
return (strtolower($days)===strtolower($daysStart)) ? true : false;// *
}
*J'aurais pu simplement faire le retour et les vérifications de chaîne, mais je préfère ajouter true/false d'une manière sûre pour être sûr que mon valeur de retour est toujours vraie ou fausse en tant que booléen, pas truthy ou falsy.