Savoir si une chaîne contient des lettres

Signaler
Messages postés
77
Date d'inscription
mardi 17 novembre 2009
Statut
Membre
Dernière intervention
18 août 2015
-
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
-
Bonjour,

je vous embête un peu, il me faudrait un moyen de savoir si une chaîne contient des lettre sans passer par d'autre fonction (style Pos, ou même Regex).

Pour l'instant j'ai pondu ça, mais ça me renvoi juste si il y a un 'a' mais il faudrait que je sache pour toutes les lettre de l'alphabet.

Peut être avec un array ?

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;
var s,s2,s3:string;
i   :integer;
begin
s:='33389866a9563958498';
s3:='a';
Str(length(s),s2); //convertit une valeur en chaine
if s2 = '19' then
for i:=1 to Length(s)-1 do
  if s[i]=s3 then
  write('ok')
  else
  write('ko');
  readln(s);
end.


Merci d'avance pour votre aide !
--

5 réponses

Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
salut !

tu peux utiliser la fonction strstr :
http://php.net/manual/fr/function.strstr.php

sinon tu vérifie :

if( (($var[i]>='A') && ($var[i]<='Z')) || (($var[i]>='a') && ($var[i]<='a'))


naga
Messages postés
77
Date d'inscription
mardi 17 novembre 2009
Statut
Membre
Dernière intervention
18 août 2015

salut Naga,

elle fonctionne sous delphi aussi ? Oo

--
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
ah l'idiot j'ai confondu x)

mais sinon la seconde méthode reste viable, cependant la syntaxe sera plutot :
if (s[i] in ['a'..'z'] )  Or (s[i] in ['A'..'Z'] ) 


désolé pour l'erreur -_-'
Messages postés
77
Date d'inscription
mardi 17 novembre 2009
Statut
Membre
Dernière intervention
18 août 2015

ah trop tard je n'avais pas vu ! ^^ merci quand même
Messages postés
77
Date d'inscription
mardi 17 novembre 2009
Statut
Membre
Dernière intervention
18 août 2015

J'ai trouvé, voici la solution au cas ou :

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;
var
s,s2:string;
i   :integer;
begin
s:='3333333333333333333';
Str(length(s),s2);             // si 19 caractères (référence à l'ID User de la table HSD User
if s2 = '19' then
for i:=1 to Length(s) do
  if (s[i] in ['0'..'9']) then // si contient des chiffres
  write('0')
  else                         // sinon
  write('1');
  read(s);
end.


--
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
et en fait si je comprend bien , tu écris 1 si ce n'est pas un chiffre, et non si c'est une lettre ... c'est à dire que si tu lis '#' tu le considère comme une lettre.

Bref c'était juste un petit point ^^
Messages postés
77
Date d'inscription
mardi 17 novembre 2009
Statut
Membre
Dernière intervention
18 août 2015

oui même #, mon but étant de s'assurer que la string ne contenait que des chiffres.
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
ok je comprends mieux ^^

et bien bon dev !
naga
Messages postés
77
Date d'inscription
mardi 17 novembre 2009
Statut
Membre
Dernière intervention
18 août 2015

thx!
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
const
  csAlphaLow    = 'abcdefghijklmnopqrstuvwxyz';
  csAlphaUp     = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  csAlphaFr     = 'éèàêûâÉÈÀÊÛÂ';
  csNumeric     = '0123456789';
  csHexanum     = '0123456789abcdefABCDEF';
  csPunctuation = '.,;!?''"-: ';
  csSpecial     = '&$#/{}()[]@^%+*-';

function strContain(const str, chars: string): boolean;
var Ns, Ls: integer;
begin
  Ls := length(str);
  result := true;
  for Ns := 1 to Ls do
  begin
    result := result and (pos(str[Ns], chars) <> 0);
    if not result then
      break;
  end;
end;


utilisation :

  str := '{ TODO -oUtilisateur -cCode du point d''entrée : Placez le code ici }'; 
  writeLn(strContain(str, csSpecial+csAlphaLow)); // FALSE
  str := '{ TODO -oUtilisateur -cCode du point d''entrée : Placez le code ici }';
  writeLn(strContain(str, csSpecial+csAlphaLow+csAlphaUp+csPunctuation)); // FALSE
  str := '{ TODO -oUtilisateur -cCode du point d''entrée : Placez le code ici }';
  writeLn(strContain(str, csSpecial+csAlphaLow+csAlphaUp+csAlphaFr+csPunctuation)); // TRUE

Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
14
Si tu veux juste contrôler que la chaine ne contient que des chiffre, peut être que l'utilisation de la fonction VAL suffit puisqu'elle fournit un code d'erreur si le résultat n'est pas un nombre
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
14