6
votes

Faites correspondre une chaîne contenant une virgule (par exemple 1,5)

Je veux vérifier si la chaîne que je prends d'un champ de texte A une virgule, afin de le laisser tomber et de demander une nouvelle valeur avec DOT.

J'essaie d'utiliser P>

        ^[1-9,]+$      


2 commentaires

Quel est le problème avec matchs (",") ?


@Djechlin que correspond à nécessite correspondre à la chaîne entière


9 Réponses :


10
votes

Vous n'avez pas besoin de forcer des expressions régulières sur ce problème. Un simple textetestar.indexof (',') va faire.


9 commentaires

Je ne suis pas d'accord. Mieux maîtriser et coller cet outil nécessaire que jamais Fuddle avec indexof et amis.


@ user946850 Un véritable maître utilise tous les instruments disponibles avec une grâce égale. S'il s'agissait de rubis ou de Perl, il serait idiomatique de tout gérer avec Regexps, mais à Java Regex n'est pas un citoyen de première classe.


Que faites-vous si la prochaine exigence au code est de vérifier si elle est faite uniquement de chiffres et d'un point? Ou si vous voulez vérifier également pour d'autres caractères? Ou ... comparer les efforts pour changer l'expression régulière avec l'alternative: utilisez d'abord l'outil "Simple" (ce qui se passe à nouveau si aucun match n'est trouvé? -1? Exception? Attendons l'API ...) Juste pour découvrir que vous avez besoin de "l'outil" de toute façon.


@ user946850 et que faites-vous si la prochaine exigence est d'analyser une structure récursive?


Je branche mon regex dans un générateur d'analyseurs sans contexte et commence à partir de là. Que fais-tu?


@ user946850 à peu près la même chose que vous, évidemment. Si je n'avais pas besoin de la regex avant, j'en aurai bien en aura besoin avec l'analyseur.


Laissez-moi expliquer ma passion à ce sujet. Une fois, j'ai dû parcourir le code Java qui a apporté une utilisation intensive des idiomes suggéré ici pour analyser la sortie HTML. Le code de quelqu'un d'autre, apparemment, il ne savait pas utiliser l'expression régulière (ou une bibliothèque HTML, à cette affaire). Regexp est, ainsi que le contrôle de la version, l'un des "DOIT sait" si vous faites le traitement du texte - mieux commencer tôt et avec des exemples simples.


@ user946850 Si vous avez le malheur de maintenir le code qui analyse du code HTML, soit par le code de code HARDSCOPS, soit indexof S et amis, vous êtes à peu près le même problème. Stackoverflow est déjà rempli d'histoires d'horreur sur les utilisateurs naïfs essayant de travailler via HTML à l'aide de "l'outil" --- car c'est le seul outil qu'ils connaissent.


Quoi qu'il en soit, je suppose que vous avez déjà concédé que l'on utilise le bon outil pour le bon travail (et suffisamment pas n'utilise pas Regexfs comme "l'outil"), qui est le point que vous avez en désaccord avec au début. .



2
votes

Le premier affirme que toute la chaîne est composée de virgules uniquement. Le second affirme que la chaîne est composée de chiffres (autres que 0 ) et des virgules, mais n'exige pas un spécifique d'entre eux. Vous pouvez utiliser ceci: xxx

Notez que vous n'avez pas besoin ^ ... $ lorsque vous utilisez correspondant (car ils sont implicites ). Mais un simple index de la solution lorsque Marko's ou Yentup est meilleur de toute façon.


1 commentaires

Solution facile et juste



4
votes

Pourquoi ne pas utiliser # String # contient au lieu de regex ici.


0 commentaires

3
votes

juste faire textesTestar.Contains (",")


0 commentaires

0
votes

Vous n'avez pas besoin de regex pour cela:

textTestAr.trim().replace(',','.');


0 commentaires

4
votes

Le caret ^ code> correspond au début du texte. [] + code> correspond à un nombre arbitraire de virgules. Ce dont vous avez besoin, c'est quelque chose à ignorer tout avant et après l'article que vous recherchez:

^.*[,].*$


1 commentaires

Quelle est l'utilisation de $ ici lorsque vous avez expliqué d'autres éléments.



4
votes

juste faire si (textesTestar.Contains (",")) System.out.println ("Ça fait!");


0 commentaires

0
votes
    public  boolean hasComma(String string) {
    if ( string.indexOf(",") > -1) {
        return true;
    }
    return false;
}

1 commentaires

Attends, ce n'était pas JavaScript? O_o



1
votes

Je vais aller directement à répondre à cela avec regex, xxx

mettre une ou une combinaison d'alphabets, de symboles ou de numéros à l'intérieur de // et il va essayer de le faire correspondre spécifiquement.


0 commentaires