1
votes

Existe-t-il un moyen d'éviter la virgule au début et à la fin de la chaîne en utilisant le javascript regex

Je ne suis pas très bon en regex et j'ai besoin d'une regex pour valider la virgule au début et à la fin de la chaîne. Je suis en train de convertir une chaîne en tableau.

La chaîne valide sera comme ceci,

/(?:,[A-Za-z]+)|(?:[A-Za-z],)/

Elle ne devrait pas autoriser les cas suivants et retourner false,

var data = ,test,test1
var data = test,test1,
var data = test,,test2,,test,

J'ai essayé l'expression régulière ci-dessous, mais cela ne fonctionne pas,

var data = test,test1,123,H345TG;

Toute aide serait très appréciée.


2 commentaires

Une virgule doit-elle être présente?


Une alternative à la validation de la chaîne avec regex: rendez-la valide à la place: codepen.io/3rror404/ pen / OJyyOVX? editors = 1111


4 Réponses :


-2
votes

console.log(
`var data = test,test1,123,H345TG;
var data = ,test,test1
var data = test,test1,
var data = test,,test2,,test,`
.split("\n")
.map(s => !!s.match(/^var\s+data\s*=\s*(?!,)(?!.*,;?$)(?!.*,,)[\w,]+;?$/))
)


0 commentaires

3
votes

Vous pouvez essayer ce modèle:

var pattern = /^\w+(,\w+)*$/;

console.log(pattern.test('test'));
console.log(pattern.test('test,test1,123,H345TG'));
console.log(pattern.test(',test,test1'));
console.log(pattern.test('test,test1,'));
console.log(pattern.test('test,,test2,,test,'));

Explication: S'il y a un caractère , , il doit être suivi d'un ou plusieurs caractères alphabétiques ou numériques.

^\w+(,\w+)*$


0 commentaires

-1
votes

Cela fera l'affaire: /^[^, Often .*[^, $/

Exemple: https://regex101.com/r/gCvO0r/1


0 commentaires

1
votes

Le modèle que vous avez essayé (?:, [A-Za-z] +) | (?: [A-Za-z],) correspond à une virgule et 1+ caractères az ou l'inverse et vous obtiendrez des correspondances partielles.

Vous ne correspondez pas aux chiffres, et si vous voulez valider la chaîne entière, vous pouvez utiliser des ancres pour affirmer le début ^ et la fin $ de la chaîne.

S'il doit y avoir une virgule, répétez le groupe non capturant une ou plusieurs fois en utilisant + , sinon utilisez * si seuls les caractères az et les chiffres sont également corrects.

const regex = /^[A-Za-z0-9]+(?:,[A-Za-z0-9]+)*$/;
[
  "test,test1,123,H345TG",
  "test",
  ",test,test1",
  "test,test1,",
  "test,,test2,,test,"
].forEach(s => console.log(`${s}: ${regex.test(s)}`));

Démo Regex

^[A-Za-z0-9]+(?:,[A-Za-z0-9]+)*$


2 commentaires

Merci pour votre réponse. Mais aussi il devrait réussir, si var data = test;


@Deepak J'ai mis à jour la réponse.