Tengo un problema extraño con la validación que estoy escribiendo en un formulario. Es un botón 'Comprobar nombre de usuario' al lado de una entrada. El valor predeterminado de entrada es el nombre de usuario, por ejemplo, 'betamax'. Cuando presiono 'Comprobar nombre de usuario' pasa la expresión regular y envía el nombre de usuario al servidor. El servidor se comporta como se esperaba y devuelve '2' para indicar a los javascript que están enviando su propio nombre de usuario.Javascript regex devuelve verdadero ... luego falso ... luego verdadero ... etc.
Luego, cuando hago clic en el botón nuevamente, la expresión regular falla. No se envía nada al servidor obviamente porque la expresión regular ha fallado. Si presiono el botón nuevamente, la expresión regular pasa y luego el nombre de usuario se envía al servidor.
¡Literalmente no puedo entender lo que haría que esto ocurra! ¡No tiene sentido para mí!
Edición: He probado el problema en Firefox y Chrome (Mac)
Este es mi código:
$j("#username-search").click(checkUserName);
function checkUserName() {
var userName = $j("#username").val();
var invalidUserMsg = 'Invalid username (a-zA-Z0-9 _ - and not - or _ at beginning or end of string)';
var filter = /^[^-_]([a-z0-9-_]{4,20})[^-_]$/gi;
if (filter.test(userName)) {
console.log("Pass")
$j.post(
"/account/profile/username_check/",
{ q: userName },
function(data){
if(data == 0) {
$j("#username-search-results").html("Error searching for username. Try again?");
}
else if(data == 5) {
$j("#username-search-results").html(invalidUserMsg);
}
else if(data == 4) {
$j("#username-search-results").html("Username too short or too long.");
}
else if(data == 2) {
$j("#username-search-results").html("This is already your username.");
}
else if(data == 3) {
$j("#username-search-results").html("This username is taken.");
}
else if(data == 1){
$j("#username-search-results").html("This username is available!");
}
});
} else {
console.log("fail")
$j("#username-search-results").html(invalidUserMsg);
}
return false;
}
El HTML:
<input name="username" id="username" value="{{ user.username }}" />
<input type="button" value="Is it taken?" id="username-search">
<span id="username-search-results"></span>
¡Aprendí algo nuevo hoy! Nunca he tratado con RegEx en JS antes. :) – Powerlord
Eso es todo. Normalmente incluyo/g por costumbre, pero creo que ya no volveré a hacerlo. ¡Gracias! – betamax
+1 Me gustaría decir que es únicamente para el uso de la palabra "regexen", pero es una gran respuesta en todos los aspectos ;-) –