Mon code est censé détecter les symboles monétaires et exécuter du code en fonction du résultat, mais le code ne détectera pas le «£» en aucune circonstance. Voici le code correspondant:
let requirements = [ "£", "$" ];
let mcontent = "$£50";
let y = 0;
for (let p = 0; p < requirements.length; ++p) {
if (mcontent.includes(requirements[p])) {
++y;
}
}
if (y == 1) {
//this is considered success, only ONE currency symbol was detected. If mcontent = '$50' or '£50', we should be here.
} else {
//this is considered failure, TWO or ZERO currency symbols were detected. In this scenario, I want the code to fail.
}
3 Réponses :
Si vous ne voulez pas utiliser RegEx, vérifiez simplement si la chaîne comprend un symbole, incrémentez un compteur et returniez s'il y avait exactement 1 correspondance:
P>
let testA = "$£50",
testB = "£50",
testC = "$50";
function checkString(str) {
const symbols = ["£", "$"];
let matches = 0;
for (const symbol of symbols)
if (str.includes(symbol)) matches++;
return matches == 1;
}
console.log(
checkString(testA),
checkString(testB),
checkString(testC)
);La variable McONTENT est entrée par l'utilisateur, pour l'exemple de l'exemple que je le mets en moi. Cela ne fonctionnerait pas dans mon scénario et j'ai besoin de la fonction.
@Senseimunchkin hein? S'il est entré par l'utilisateur, vous pouvez simplement le transmettre à checkstring code>. C'est comme ça que je l'ai appelé avec plusieurs entrées différentes en bas.
Aussi @senseimunchkin, cette réponse implémente string.includes code>, donc je suis confus par ce commentaire également.
Utilisez REGEXP Il retournera vrai ou flasé en fonction de la valeur. Cet exemple vous donnera une idée de la façon de l'utiliser
<p>Enter value</p> <input id="elementTwo" type="text" />
Le point est qu'ils veulent qu'il ne renvoie faux que s'il y a exactement un symbole de devise i>
@Leafthelegend merci de clarifier, j'ai probablement mal compris
La manière la plus concise de le faire est de vérifier avec voici un exemple en direct: p> P> regexp code> comme ceci: const mcontent1 = '$£50';
const mcontent2 = '£50';
const mcontent3 = '$50';
const regex = /£|\$/g; // slash to escape $ because it has special meaning in regex
console.log(mcontent1.match(regex).length == 1); // false
console.log(mcontent2.match(regex).length == 1); // true
console.log(mcontent3.match(regex).length == 1); // true
Serait-il un moyen de modifier de manière dynamique la regex sur la base du tableau des exigences?
@Leafthelegend a demandé exactement la même question que j'avais. Les exigences sont écrites dans un fichier JSON et vous aurez besoin du regex pour travailler avec tout ce que je sais.
Oui. Const Regex = New Regexp (exigences.join ('|'). Remplacez ($ '', '\\ $' '),' g ') code>. Étant donné que $ code> a une signification particulière dans regexp code>, il doit être échappé avec une barre oblique. Et puisqu'un Slash a une signification spéciale dans les chaînes, la barre oblique elle-même doit être échappée d'une barre oblique.
Vous pouvez également simplement mettre les symboles monétaires dans une classe de caractères comme nouvelle regexp ("[" + ['$', '£']. Joindre ('') + "]") code>. Si vous n'êtes pas limité à un ensemble de symboles monétaires et que vous vouliez vous permettre d'autoriser l'un d'entre eux, vous pouvez simplement utiliser / \ p {s} / code>
C'est intéressant, je ne le savais pas. Cela devrait être la bonne réponse. Utilisez / \ p {s} / g code> comme valeur de regex code> si vous autorisez tout symbole de devise.
Attendez, savoir '3,50 $'.Match (/ \ p {s} / g) code> évalue vers null code>?
Hm ... il semble que JavaScript ne puisse pas prendre en charge les gammes Unicode. Ça craint. JavaScript est toujours un peu derrière dans le département de regex. Quoi qu'il en soit, si vous voulez vérifier les gammes, c'est une bonne ressource: régulier-expressions.info /unicode.html
Mais ici, c'est en action, juste pour prouver que je ne ment pas ;-) Regex101.com/r / SSRBG9 / 1
Ah! Je dois ajouter le drapeau u code>. Donc, la regex correcte est / \ p {s} / gu code>. Je l'avais également vu travailler sur ce site Web, c'est pourquoi j'ai été confus.
Ils ne s'appuient pas sur le moteur de regex du navigateur pour le faire. Ils vous laissent également faire des points de vue, que JavaScript ne supporte pas unanimement (et même à quoi ressemblons peu nous sommes assez récents). Si vous remarquez, ils vous ont même laissé choisir différents moteurs de regex.
Qu'est-ce que vous attendiez? Vous avez deux symboles de devise dans cette chaîne.
@ hev1 J'ai même répondu à la question en réécrivant le code sans remarquer 🤦
La question est que cela ne détecte pas le tout, même si c'est «50 £», qui devrait compter en tant que succès.
@Senseimunchkin je ne peux pas reproduire le problème: jsfiddle.net/qkl3zcyp
Il devrait être détecter 2 symboles, mais il ne détectera pas la £. Y devrait être égal à 2, pas 1.
CONSOLE.LOG (Y) CODE> Avant votre relevé IF, vous verrez2 code>, pas 1.Désolé, mais je ne comprends pas 2.
Op, vous ne retournez rien, ou ne faites rien à l'intérieur du
si / else code> blocs. Est-ce le problème ici?Livre et USD en même temps donnera 2 la sortie
Veuillez ajouter une description de ce que vous attendez
Plus facile d'utiliser une regex
@Senseimunchkin Quel navigateur utilisez-vous (et version?)
Christian, je n'inclus pas ce que j'ai dans les blocs if / sinon, car ils ne sont pas pertinents pour ma question. Mohsenalyafei, ce ne sera pas. C'est la question que je vais avoir Yash, je m'attends à ce que Y soit égal à 2 quand il y a à la fois $ et £, y à égaler 1 quand il n'y a qu'un seul symbole, et pour y à égal à 0 quand il n'y a pas non plus.
@NickParsons C'est une application nœud.js pour un bot de discorde.
@Senseimunchkin comme plusieurs personnes ont dit,
y code> est égal à2 code> au bas de ce bloc de capture. Vous n'avez pas connectéy code> avecconsole.log (y) code> ou que vous le verriez 2. Il s'agira beaucoup de problèmes de construction d'un bot de discorde sans savoir comment enregistrer une valeur .Voir: JSFIDDLE.net/Z648JRS0
@Senseimunchkin Votre problème n'est pas reproductible (sur un serveur Nodejs Impress 2): repl.it/repls /WearAnCualiskstatetstatetstatetsex#index.js , vous manquez des détails, essayez de créer un exemple de reproductible minimal A > Pour que les gens puissent aider à déboguer votre code. Vous dites aussi que
mcontent code> est saisi par l'utilisateur, assurez-vous que le personnage que vous pensez est£ code> qui est entré par l'utilisateur est en fait la même chose que celle dans votre tableau.Le £ est le même signe utilisé dans la matrice.
J'ai couru les tonnes de code des moments et oui, j'ai enregistré y. Il génère 1 chaque fois.