2017-10-18 5 views
-1

Je ne suis pas très bon dans la construction d'expressions régulières. Cest pourquoi je vous demande! :)Regex for Lastname dans la plage de lettres

Ainsi, im travaillant avec des gammes de lettres qui se tiennent pour le début du nom, par exemple:

1: X-Y 
2: Ki-Kj 
3: Al-Bkz 

Les gammes support tout pour un processus spécifique, c'est pourquoi je dois savoir qui regex fits au nom de famille. Le nom de famille "Albert" entrerait dans la regex # 3, "Kioto" entrerait dans # 2. J'espère que cela a du sens pour vous.

La regex doit également être assez complexe pour gérer des gammes telles que "Bauer-Schmidt".

J'ai vraiment, vraiment besoin de votre aide!

+0

Vraiment pas un problème de regex ... Vous devriez plutôt utiliser une simple comparaison de chaînes par rapport aux limites inférieure et supérieure de chaque intervalle. – CBroe

+0

Mais comment puis-je comparer aux plages comprises entre les paramètres définis? Par exemple "Ab-De". Comment puis-je comparer mon nom de famille qui commence par "Co"? – h00ligan

+0

Pouvez-vous élaborer plus de ce dont vous avez besoin exactement, avez-vous besoin de filtrer tous les noms qui commence par quelques lettres et se termine par quelques lettres, veuillez mettre à jour votre question – msoliman

Répondre

1

Vraiment pas un problème que vous devriez utiliser regex pour la première fois ... Utilisez plutôt une simple comparaison de chaînes par rapport aux limites inférieure et supérieure de chaque intervalle.

function check_name_in_range($name) { 
    $ranges = [ 
    1 => ['X', 'Y'], 
    2 => ['Ki', 'Kj'], 
    3 => ['Al', 'Bkz'], 
    ]; 
    foreach($ranges as $rangeNum => $range) { 
    if(substr($name, 0, strlen($range[0])) >= $range[0] && 
     substr($name, 0, strlen($range[1])) <= $range[1]) { 
     return $name. ' falls into range ' . $rangeNum; 
    } 
    } 
    return $name. ' does not fall into any range'; 
} 

var_dump(
    check_name_in_range('Albert'), 
    check_name_in_range('Kjooto'), 
    check_name_in_range('FitsEffAll') 
); 

Vous pourriez wan en minuscules toutes les chaînes concernées avant la comparaison, de sorte que A/a ne devient pas un problème, car ce sont pas égales.

+0

Est-ce que cela fonctionne également si j'ai une portée qui ne contient que le début "Alz"? Ou cela me donne-t-il aussi le nom "Button" qui est> = Alz mais ne correspondrait pas à la règle. – h00ligan

+0

Vous voulez dire une plage avec une seule limite, donc un seul élément dans l'entrée de tableau correspondante? Non, cela ne fonctionnera pas, sauf si vous modifiez le code pour vérifier cela. Mais en as-tu vraiment besoin? Si vous voulez attraper tout ce qui est plus grand, dites 'Foo', dans une gamme - alors vous pouvez simplement faire' Z' la limite supérieure. – CBroe

+0

Si je prends le nom de famille "Kjooto", qui devrait tenir dans "Ki-Kj" votre code ne fonctionne pas. – h00ligan

0

Je ne sais pas exactement ce que vous demander, mais ce que je comprends faire comme ça

[a-zA-Z]{2} 

cela vous donnera comme albert al. Si vous ne souhaitez que des lettres majuscules, puis:

[A-Z]{2} 

S'il vous plaît à commenter ce que vous voulez exactement. Merci