8
votes

expression régulière pour détecter les nombres écrits comme des mots

J'ai besoin de code PHP pour détecter si une chaîne contient 4 numéros écrites consécutifs ou plus (0 à 9), comme: xxx

ou xxx


4 commentaires

Les chiffres peuvent-ils être arbitrairement importants?


Est "cent quarante six" un numéro? Deux nombres? Trois? Quatre?


seuls les nombres simples zéro jusqu'à neuf


Les douze dans votre exemple ne sont-ils pas pertinents? Serait "un quatre six douze" match ou pas?


4 Réponses :


2
votes
if (preg_match(...put regex here..., $stringToTestAgainst)) {
    // ...
}

2 commentaires

@Sherif, oui. Notez que vous aurez besoin de mettre la regex dans une chaîne ( "/.../" ), et vous aurez probablement besoin d'échapper au \ s (= > \\ s ).


Les numéros autorisés sont de zéro à neuf mais pas dix



6
votes

Vous pouvez le faire comme ceci: xxx

(Rubular)


0 commentaires

0
votes
if (preg_match("/(?:\b(?:(one)|(two)|(three)|(four)|(five)|(six)|(seven)|(eight)|(nine))\b\s*?){4,}/", $variable_to_test_against, $matches)) {
  echo "Match was found <br />";
  echo $matches[0];
}
EDIT:Added space(s) in the regular expression - thanks to Kobi.

1 commentaires

Ne manquez-vous pas les espaces entre les mots?



3
votes

Une autre option est la suivante:

\b(?:(?:one|two|three|four|five|six|seven|eight|nine|zero)\b\s*?){4}


3 commentaires

+1 J'aime beaucoup cette approche. Voici un lien rubulaire pour cela: rubular.com/r/fm4dgwkngg ... Vous avez oublié zéro.


@Mark - merci. Je l'ai testé là aussi, j'ai juste oublié le lien. J'ai zéro, mais ce n'est pas trié :)


Oh oui, c'est trié dans l'ordre du clavier. J'aurais dû remarquer que zéro est l'un des exemples de la liaison rubrique. Désolé. :)