Devo convalidare l'inserimento della casella di testo come numero di carta di credito. Ho già regex per diverse carte di credito:Posso "combinare" 2 regex con una logica o?
- Visa:
^4[0-9]{12}(?:[0-9]{3})?$
- Mastercard:
^([51|52|53|54|55]{2})([0-9]{14})$
- American Express:
^3[47][0-9]{13}$
e molti altri.
Il problema è che voglio convalidare utilizzando espressioni regolari diverse basate su utenti diversi. Ad esempio: per user1, Visa e Mastercard sono disponibili, mentre per user2, Visa e American Express sono disponibili. Quindi vorrei generare una stringa regex finale in modo dinamico, che combina una o più stringhe regex sopra, come:
user1Regex = Visa regex + "||" + Mastercard regex
user2Regex = Visa regex + "||" + American Express regex
C'è un modo per farlo? Grazie,
+1 per '(' :) che funziona con '? (:? foo | bar)' per logica o con le stringhe | caratteri di caratteri multipli – n611x007
Ho provato questo e 'Visaregex' deve essere tagliato, altrimenti le barre verranno incluse letteralmente nella combinazione. in altre parole se 'Visaregex ==/ab + c /' e 'Mastercardregex ==/de + f /' allora 'user1Regex' finirà per essere'/(\/ab + c \ /) | (\/de + f \ /)/', non'/(ab + c) | (de + f)/'come volevamo. Quindi cambierei la tua risposta a: 'let user1Regex = new RegExp (\' ($ {Visaregex.toString(). Slice (1, -1)}) | ($ {Mastercardregex.toString(). Slice (1, - 1)}) \ ');'. – chharvey