Détecter une majuscule dans un mot - PHP
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
je suis actuellement à la recherche d'un script "passe partout". J'entends par là qu'une fois mis en place : il me suffirait de suivre une convention de nommage pour que le script fonctionne tout le temps.
Le cas est le suivant : j'ai une table qui se nomme " personne ".
Elle peut contenir X champs.
J'ai une page qui affiche les informations actuelles et en même temps un formulaire pour les modifier.
Ma convention de nommage est la suivante :
[information]_[nom de la table]
exemple : prenom_personne,
cp_personne
etc..
Code actuel :
data est un tableau contenant les informations d'une personne de la table.
Le problème c'est que visuellement le formulaire n'est pas très explicite, vu qu'on voit apparaître :
cp 74000 [input de type text vide]
Je voudrais donc qu'à la place du cp on affiche : Code Postal
ma première idée était de nommer mon champ de cette façon :
codePostal_personne. Mais je ne trouve pas de fonction php pour détecter la majuscule.
On pourrait alors mettre un tableau contenant les 24 lettres de l'alphabet en majuscule et utiliser la fonction explode. Mais est-ce que ça ne serait pas lourd ?
Sinon écrire " code-postal_personne " et à nouveau utiliser explode.
Mais est-ce que ce n'est pas déconseillé de nommer un champ de cette façon dans la table ?
2)
Pour ce qui est du champ prenom :je voudrais mettre l'accent pour obtenir : Prénom.
Puis-je le mettre directement dans la bdd ? Sinon il me semble impossible de rajouter cette accents à moins de le spécifier dans le script.
Et au final s'il y a 10 champs avec des accents je devrais faire les 10 champs ce qui n'est pas top !
Merci à ceux qui ont lu ce post :).
je suis actuellement à la recherche d'un script "passe partout". J'entends par là qu'une fois mis en place : il me suffirait de suivre une convention de nommage pour que le script fonctionne tout le temps.
Le cas est le suivant : j'ai une table qui se nomme " personne ".
Elle peut contenir X champs.
J'ai une page qui affiche les informations actuelles et en même temps un formulaire pour les modifier.
Ma convention de nommage est la suivante :
[information]_[nom de la table]
exemple : prenom_personne,
cp_personne
etc..
Code actuel :
data est un tableau contenant les informations d'une personne de la table.
foreach($data as $cle => $element) { $mots = explode("_", $cle); //séparation des mots à chaque "_" /* Ici on obtient donc : mot[0] = cp mot[1] = personne */ //J'affiche donc mon label pour chaque champ <label for=" ' .$cle. ' "> ' .$mots[0]. ' </label> }
Le problème c'est que visuellement le formulaire n'est pas très explicite, vu qu'on voit apparaître :
cp 74000 [input de type text vide]
Je voudrais donc qu'à la place du cp on affiche : Code Postal
ma première idée était de nommer mon champ de cette façon :
codePostal_personne. Mais je ne trouve pas de fonction php pour détecter la majuscule.
On pourrait alors mettre un tableau contenant les 24 lettres de l'alphabet en majuscule et utiliser la fonction explode. Mais est-ce que ça ne serait pas lourd ?
Sinon écrire " code-postal_personne " et à nouveau utiliser explode.
Mais est-ce que ce n'est pas déconseillé de nommer un champ de cette façon dans la table ?
2)
Pour ce qui est du champ prenom :je voudrais mettre l'accent pour obtenir : Prénom.
Puis-je le mettre directement dans la bdd ? Sinon il me semble impossible de rajouter cette accents à moins de le spécifier dans le script.
if(prenom_personne == $cle){ mots[0] = "prénom"; }
Et au final s'il y a 10 champs avec des accents je devrais faire les 10 champs ce qui n'est pas top !
Merci à ceux qui ont lu ce post :).
A voir également:
- Majuscule php
- Détecter majuscule python - Meilleures réponses
- Comment trouver le seul mot a réellement été écrit en majuscule word - Meilleures réponses
- É majuscule - Guide
- Majuscule - Guide
- Code ascii de a majuscule - Guide
- Mettre en majuscule - Guide
- Easy php - Télécharger - Divers Web & Internet
4 réponses
Avec ceci tu trouves dans $result la premiere majscule de $data...
Avec ceci tu trouves dans $result la premiere majscule ainsi que toute la suite de caracteres de $data...
Abandonne ce qui te trouble au profit de ce qui apaise ton coeur.
if (preg_match('#^[^A-Z]*([A-Z])#',$data,$result)) $result=$result[1]; else unset($result);
Avec ceci tu trouves dans $result la premiere majscule ainsi que toute la suite de caracteres de $data...
if (preg_match('#^[^A-Z]*([A-Z].*)#',$data,$result)) $result=$result[1]; else unset($result);
Abandonne ce qui te trouble au profit de ce qui apaise ton coeur.
pour faire des essais si $test est un array qui provient de ta base de données:
Abandonne ce qui te trouble au profit de ce qui apaise ton coeur.
<?php function explode_maj($t=false){ if ($t) return explode(' ',trim(preg_replace('#([A-Z])#',' $1',$t)));} $b='\',\''; $test=array('SalutCeciEstUnTestPourVoirSiLaFonctionDiviseBienUnTexteTresLongLol','DeuxMots','Un','57','MAJUSCULES'); foreach ($test as $value) echo "<h2>$value</h2>".trim('$k = array(\''.implode($b, explode_maj($value)).'\');'); ?>
Abandonne ce qui te trouble au profit de ce qui apaise ton coeur.
j'ai beau relire la doc je comprend pas à quoi sert le $1 de preg_replace.
Tu remplaces toutes les maj par ' $1' (un espace et la variable 1) ?
Et ensuite avec explode tu remplaces ' $1' par un espace ?
Et pour finir tu remplace tous les espaces par ',' pour les mettre dans le tableau qui s'appel $k ?
Tu remplaces toutes les maj par ' $1' (un espace et la variable 1) ?
Et ensuite avec explode tu remplaces ' $1' par un espace ?
Et pour finir tu remplace tous les espaces par ',' pour les mettre dans le tableau qui s'appel $k ?
tu peux faire une fonction de réécriture, mais il faudrait plus de détails... une regex match touts les couples [information]_[nom de la table] la fonction réécrit le champ [information] et retourne le résultat...
@ktm
Un grand merci, j'ai pu utiliser ta fonction. Elle répond parfaitement aux attentes.
Cependant j'ai essayé avec un autre mot. Admettons : motDePasse.
Pour séparer "de" et "passe" : on relance la fonction ?
Je pensais que preg_match_all ferait l'affaire. Mais ce n'est pas le cas, à moins que je l'ai mal utilisée ?
Un grand merci, j'ai pu utiliser ta fonction. Elle répond parfaitement aux attentes.
if (preg_match('#^[^A-Z]*([A-Z].*)#',"codePostal",$result)){ $result = $result[1]; echo $result; } // Si d'autre lise ce post, pour afficher le tableau : echo '<pre>'; print_r($result) ; echo '</pre>';
Cependant j'ai essayé avec un autre mot. Admettons : motDePasse.
Pour séparer "de" et "passe" : on relance la fonction ?
Je pensais que preg_match_all ferait l'affaire. Mais ce n'est pas le cas, à moins que je l'ai mal utilisée ?
Avec ceci tu trouves dans le tableau $result la premiere majscule du premier mot et la première majuscule du deuxième mot de $data...
Avec ceci tu trouves dans le tableau $result la premiere majscule et toutes les minuscules du premier mot et la première majuscule et toutes les minuscules du deuxième mot de $data...
Avec ceci tu trouves dans le tableau $result la premiere majscule et toutes les minuscules et les chiffres du premier mot et la première majuscule et toutes les minuscules et les chiffres du deuxième mot de $data...
Avec ceci tu trouves dans le tableau $result la premiere majscule et tout le reste du premier mot et la première majuscule et toutes le reste de l'expression $data...
if (preg_match('#^[^A-Z]*([A-Z])[a-z]*?([A-Z])#',$data,$result)) $result=array($result[1],$result[2]); else unset($result);
Avec ceci tu trouves dans le tableau $result la premiere majscule et toutes les minuscules du premier mot et la première majuscule et toutes les minuscules du deuxième mot de $data...
if (preg_match('#^[^A-Z]*([A-Z][a-z]*?)([A-Z][a-z]*?)#',$data,$result)) $result=array($result[1],$result[2]); else unset($result);
Avec ceci tu trouves dans le tableau $result la premiere majscule et toutes les minuscules et les chiffres du premier mot et la première majuscule et toutes les minuscules et les chiffres du deuxième mot de $data...
if (preg_match('#^[^A-Z]*([A-Z][a-z0-9]*?)([A-Z][a-z0-9]*?)#',$data,$result)) $result=array($result[1],$result[2]); else unset($result);
Avec ceci tu trouves dans le tableau $result la premiere majscule et tout le reste du premier mot et la première majuscule et toutes le reste de l'expression $data...
if (preg_match('#^[^A-Z]*([A-Z][^A-Z]*?)([A-Z].*)#',$data,$result)) $result=array($result[1],$result[2]); else unset($result);
En effet la fonction remplie sont rôle. J'ai enfin compris globalement comment marchait les regex.
Mais j'ai des zone floues dans ce que tu as mis.
^[^A-Z]* --> en début de chaîne on ne doit pas trouver de majuscule.
([A-Z][^A-Z]*?) --> dans la variable numéro 2 : On doit trouver une majuscule, puis des minuscule (0,1 ou plusieurs fois = *) mais à quoi sert le ? (puisqu'il dit aussi que c'est facultatif ?)
Finalement mon script final :
Un grand merci pour ton aide :).
Mais j'ai des zone floues dans ce que tu as mis.
^[^A-Z]* --> en début de chaîne on ne doit pas trouver de majuscule.
([A-Z][^A-Z]*?) --> dans la variable numéro 2 : On doit trouver une majuscule, puis des minuscule (0,1 ou plusieurs fois = *) mais à quoi sert le ? (puisqu'il dit aussi que c'est facultatif ?)
Finalement mon script final :
<?php $text = "UnJourMonAncetreGurdil"; //On supprime toutes les minuscules $majuscule = preg_replace('#[a-z]#','', $text); //On compte le nombre de majuscules $nbrMajuscule = strlen($majuscule); /* Régex qui permet d'obtenir une majuscule et les minuscules, ne pas oublier les # voir Site du zero Memento des expressions régulières */ $regexInitiale='([A-Z][^A-Z]*)'; $regexFinale = ' '; //On créer la régex en ajoutant l'initiale pour chaque mot FOR($iBcl=0;$iBcl<$nbrMajuscule;$iBcl++){ $regexFinale .= $regexInitiale; } //On rajoute les # de chaque côté $regexFinale = "#" . $regexFinale . "#"; //On effectue la requête if (preg_match($regexFinale,$text,$result)){ //La première ligne est supprimée car elle contient toute la variable $text unset($result[0]); /* Affichez le tableau de résultat echo '<pre>'; print_r($result) ; echo '</pre>'; */ }else{ unset($result); } ?>
Un grand merci pour ton aide :).
Tout ton script =
exemple
$text = 'UnJourMonAncetreGurdil'; $result = explode(' ',trim(preg_replace('#([A-Z])#',' $1',$text)));
exemple
SalutCeciEstUnTestPourVoirSiLaFonctionDiviseBienUnTexteTresLongLolretourne
Array ( [0] => Salut [1] => Ceci [2] => Est [3] => Un [4] => Test [5] => Pour [6] => Voir [7] => Si [8] => La [9] => Fonction [10] => Divise [11] => Bien [12] => Un [13] => Texte [14] => Tres [15] => Long [16] => Lol )
retourne