2017-05-24 5 views
0

J'utilise 1000hz Bootstrap Validator pour valider les champs de mon formulaire de contact. J'utilise data-pattern sur un champ d'email pour m'assurer que le format est correct. Je souhaite écrire une validation de modèle de données dans laquelle je n'autorise pas les adresses électroniques ou les URL dans un champ de texte unique.Validation Bootstrap: Comment écrire une REGEX négative pour le modèle de données?

Je suis en train de programmer en Ruby et j'écrirais normalement une logique comme celle-ci pour valider un champ de texte en dehors du formulaire.

if params[:message] =~ /myemailregexpattern/i || params[:message] =~ /myurlregexpattern/ 
    display error message 

Fondamentalement, je veux faire quelque chose comme ce qui suit où il identifiera une valeur de champ comme valide si les matchs ne sont pas trouvées pour les deux modèles regex.

"data-pattern" => "**--negate--**myemailregexpattern**--and---**myurlregexpattern" 

OU

"data-pattern" => "**--negate--**((myemailregexpattern)|(myurlregexpattern))" 

Après avoir lu plusieurs messages ici et sur plusieurs blogs de référence proposés et les sites Web que je ne l'ai pas trouvé d'exemples où est réduit à néant une regex entière. J'ai pensé que je pourrais être en mesure d'utiliser un lookaround mais il n'était pas clair si cela fonctionnerait ou comment écrire l'expression rationnelle.

+0

Y a-t-il une raison pour laquelle vous ne pouvez pas annuler la comparaison? Utilisez '! ~' Au lieu de '= ~', ou '! (Expression)', etc. –

+0

J'ai vu | pour la ou la condition utilisée. J'ai vu des exemples de conditions d'if-then-else dans la regex. Je n'ai pas vu! ~ Ou! utilisé dans les expressions regex. Je vais essayer cela et voir si cela fonctionne. –

+0

Ce ne sont pas des opérateurs regex. Je parle de la logique externe qui effectue la correspondance regex. Peut-être que si vous fournissiez plus de contexte autour de ce que vous essayez de faire? –

Répondre

0

Une partie du problème avec les expressions régulières de "négation" est une de définition; exactement ce qui constitue "pas une adresse e-mail"? La chaîne vide? Dans une chaîne sans @, chaque caractère correspond-il à votre expression régulière "pas une adresse e-mail"? Donc, vous devez toujours avoir une sorte de condition de correspondance positive en plus de la négative.

Si votre moteur regex prend en charge négative et préanalyse lookbehind, vous pouvez les utiliser pour rechercher quelque chose qui, en plus de ce qu'il est , est aussi pas autre chose. Voici un exemple, si regex est l'expression régulière que vous êtes « nier »:

^(?!regex).*(?<!regex)$ 

qui correspond à quoi que ce soit, tant que ce qui correspond à la .* ne correspond pas aussi regex.

Mais cela dépend fortement du moteur, et Javascript (par exemple) ne supporte pas lookbehind (positif ou négatif).