0
votes

Expressions régulières JavaScript - Accepter non-zéro pour le premier numéro en montant

Je veux accepter un numéro qui ne commence pas avec zéro mais que les valeurs ultérieures peuvent être zéro. J'utilise var.replace (/ [^ 1-9] / g, ''); qui ne me permettent pas d'entrer 0 du tout.

valide: xxx

invalide: xxx p> i devrait ne pas être capable d'entrer 0 au début. Si 0 est entré, il doit être remplacé par '' vide qui est la logique


3 commentaires

Plus de contexte (code) s'il vous plaît


en utilisant l'expression dans la directive - INPUTVALUE.REPLACE (/ [^ 0-9] / G, ''); @Felixschildmann


Veuillez modifier votre question et ajouter des numéros valides et invalide.


3 Réponses :


2
votes

Si vous souhaitez vérifier si la valeur de la première valeur n'est pas zéro, vous pouvez simplement faire un substrateur: xxx pré>


Si vous voulez tous les zéros de premier plan remplacés: P > xxx pré>

le ^ code> signifie 'chaîne commence par ", puis" un ou plusieurs "( + code>) zéros. P>


Si vous voulez tous les zéros de premier plan avant un chiffre ( \ d code>) remplacé: p> xxx pré>

le ^ code> signifie "chaîne commence par", puis "un ou plusieurs" ( + code>) zéros. p>


Si vous voulez obtenir le premier chiffre après les zéros:

Le caractère ^ code> signifie "début de chaîne". Vous dites qu'il pourrait être 000001 code>, le 1 code> n'est pas au début de la chaîne, de sorte que ne correspondra jamais. P>

Je trouve cela utile à Définir ce que je veux dans le texte: p>

  • Je veux le premier chiffre, un seul -> [1-9] code> li>
  • commence par ( ^ code>) sup> avec un ou plusieurs ( + code>) sup> zéros -> ^ 0 + code> li> ul>

    qui aboutit à ^ 0 + [1-9] code>.
    Nous voulons seulement stocker le chiffre, nous nous placons donc dans un groupe: ^ 0 + ([1-9]) code> p>

    p>

    const examples = [
      '123', // no starting zeroes
      '0123', // match
      '000123', // match
      '132000123', // no matching zeroes, dont match the end either!
    ];
    
    console.log(examples.map(function (example) {
      const matches = example.match(/^0+([1-9])/);
      return example + ' -> ' + (matches !== null ? matches[1] : 'no match!');
    }));


4 commentaires

J'ai entré (/ [^ 1-9] + ([1-9]) / g, ''); car mon cas est-il juste?


Je vous suggère de lire mon post à nouveau :) Regex est délicate. Vous avez maintenant "DOIT commencer avec 1-9, au moins sur le personnage. Puis capturer [1-9] pour faire quelque chose avec elle


Je pense que vous avez mal compris la question. Ils veulent rejeter des nombres qui commencent à zéro.


Merci, j'ai mis à jour ma réponse. Juste la réponse originale, pourrait aussi bien ajouter quelques saveurs :)



0
votes

L'évacuation \ d correspond à n'importe quel chiffre de 0 à 9. Puisque vous avez dit que le nombre ne doit pas commencer par zéro, nous pouvons commencer par écrire [1-9] .

Ainsi, la regex finale ressemblera à: / ^ [1-9] \ d * $ / g .

Ceci correspondra à tout numéro positif non nul, à condition que la chaîne entière.

Vous pouvez valider automatiquement les entrées de formulaire avec cette regex.


2 commentaires

Salut. Votre réponse ne fonctionnera pas à cause de la même erreur OP. Vous le forcez à commencer par un [1-9] , mais il ne correspond pas s'il commence par un ou plusieurs zéros: regex101.com/r/10icr7/1


Je pensais que cela dit ne commence pas avec 0 mais peut avoir 0 plus tard sur



1
votes

Vous pouvez utiliser un lookahead négatif pour être sûr que le 1rst chiffre n'est pas zéro:

p>

var test = [
'0123',
'000001',
'abc',
'123',
'102030',
];
console.log(test.map(function (a) {
  return a + ' :' + /^(?!0)\d+$/.test(a);
}));


0 commentaires