Esto es lo que he probado:
let args = getArgs(message, commandRecd).split(","); if (args == validday && !validdays && !validhour && !validhours && !validminute && !validminutes ){ countdown() } if (args == validdays && !validday && !validhour && !validhours && !validminute && !validminutes ){ countdown() } if (args == validhour && !validday && !validdays && !validhours && !validminute && !validminutes ){ countdown() } if (args == validhours && !validday && !validdays && !validhour && !validminute && !validminutes ){ countdown() } if (args == validminute && !validday && !validdays && !validhour && !validhours && !validminutes ){ countdown() } if (args == validminutes && !validday && !validdays && !validhour && !validhours && !validminute ){ countdown() }La expresión regular validada es:
const validday = /\dday/ const validdays = /\dday/ const validhour = /\dhour/ const validhours = /\dhours/ const validminute =/\dminute/ const validminutes = /\dminutes/Pero cuando probé e hice mi solicitud como 1 minuto, la cuenta regresiva no comienza.
pd: no hay problema con el código de cuenta regresiva, ya que el código de cuenta regresiva en sí funciona cuando lo ejecuto sin validación de expresiones regulares.
pps: usando discord.js
El problema aquí es que args es una matriz ( args.split devuelve una matriz) y está intentando validar args como una cadena. ( args == validday , etc.) Dado que args es una matriz y no una expresión regular, la declaración if/else devuelve falso, por lo que su función de cuenta regresiva no se ejecuta. Además de eso, no debería usar == para validar una cadena usando expresiones regulares, use .test en su lugar para un valor verdadero/falso.
Además de eso, no se recomienda usar múltiples bloques if else con los mismos parámetros, ya que cuantos más bloques if else agregue, más difícil será depurar y cambiar valores, por lo que cambié esto en un bucle for..in para hacer es más limpio.
El siguiente código supone que el segundo elemento en args es la información que está buscando. Es posible que deba editar esto si es necesario.
He reescrito tu código aquí, con documentación sobre lo que significa cada línea:
let args = getArgs(message, commandRecd).split(","); //second element of args, change this as needed, this is the data that we are checking the regex against var data = args[1] //These are the regexes that we are checking data against var validationArr = [/\dday/, /\dhour/, /\dhours/, /\dminute/, /\dminutes/] //for every element in validationArr, we check it against the data to see if we get a match var i = 0; //counts the number of times we get a match for(x in validationArr){ //.test returns true if there is a match if(validationArr[x].test(data)){ i++; } } //this means that we have only gotten one match out of all the regexes. if(i == 1){ countdown() } Más lecturas sobre <Regex>.test() ¡Espero que esto ayude! Siéntete libre de comentar si no entiendes una línea.