java - regulares - Expresión regular para validar el nombre de usuario
expresiones regulares java (7)
Este debería hacer el truco:
if (Regex.IsMatch(text, @"
# Validate username with 5 constraints.
^ # Anchor to start of string.
# 1- only contains alphanumeric characters , underscore and dot.
# 2- underscore and dot can''t be at the end or start of username,
# 3- underscore and dot can''t come next to each other.
# 4- each time just one occurrence of underscore or dot is valid.
(?=[A-Za-z0-9]+(?:[_.][A-Za-z0-9]+)*$)
# 5- number of characters must be between 8 to 20.
[A-Za-z0-9_.]{8,20} # Apply constraint 5.
$ # Anchor to end of string.
", RegexOptions.IgnorePatternWhitespace))
{
// Successful match
} else {
// Match attempt failed
}
Intento crear una expresión regular para validar nombres de usuario con estos criterios:
- Solo contiene caracteres alfanuméricos , guión bajo y punto .
- El subrayado y el punto no pueden estar al final o al inicio de un nombre de usuario (p
_username
Ej._username
/username_
/.username
/username.
). - El subrayado y el punto no pueden estar uno al lado del otro (por ejemplo,
user_.name
). - El guión bajo o el punto no se pueden usar varias veces seguidas (p.
user__name
.user..name
user__name
/ nombre deuser..name
). - El número de caracteres debe estar entre 8 y 20.
Esto es lo que he hecho hasta ahora; parece que impone todas las reglas de criterio, pero la quinta regla . No sé cómo agregar la quinta regla a esto:
^[a-zA-Z0-9]+([._]?[a-zA-Z0-9]+)*$
Lo siento, lo generé desde mi propia biblioteca y usa la sintaxis válida para Dart / Javascript / Java / Python, pero de todos modos, aquí va:
(?:^)(?:(?:[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKlMNOPQRSTUVWXYZ0123456789]){1,1})(?!(?:(?:(?:(?:_/.){1,1}))|(?:(?:(?:__){1,1}))|(?:(?:(?:/./.){1,1}))))(?:(?:(?:(?:[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKlMNOPQRSTUVWXYZ0123456789._]){1,1})(?!(?:(?:(?:(?:_/.){1,1}))|(?:(?:(?:__){1,1}))|(?:(?:(?:/./.){1,1}))))){6,18})(?:(?:[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKlMNOPQRSTUVWXYZ0123456789]){1,1})(?:$)
Mi código de biblioteca:
var alphaNumeric = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "l", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
var allValidCharacters = new List.from(alphaNumeric);
allValidCharacters.addAll([".", "_"]);
var invalidSequence = (r) => r
.eitherString("_.")
.orString("__")
.orString("..");
var regex = new RegExpBuilder()
.start()
.exactly(1).from(alphaNumeric).notBehind(invalidSequence)
.min(6).max(18).like((r) => r.exactly(1).from(allValidCharacters).notBehind(invalidSequence))
.exactly(1).from(alphaNumeric)
.end()
.getRegExp();
Mi biblioteca: https://github.com/thebinarysearchtree/RegExpBuilder
Por mucho que me gusten las expresiones regulares, creo que hay un límite para lo que es legible
Entonces sugeriría
new Regex("^[a-z._]+$", RegexOptions.IgnoreCase).IsMatch(username) &&
!username.StartsWith(".") &&
!username.StartsWith("_") &&
!username.EndsWith(".") &&
!username.EndsWith("_") &&
!username.Contains("..") &&
!username.Contains("__") &&
!username.Contains("._") &&
!username.Contains("_.");
Es más largo, pero no será necesario que el mantenedor abra el expresso para comprenderlo.
Claro que puedes comentar una expresión regular larga pero luego quien lo lea tiene que confiar en la confianza .......
Supongo que tendrías que usar expresiones Lookahead aquí. http://www.regular-expressions.info/lookaround.html
Tratar
^[a-zA-Z0-9](_(?!(/.|_))|/.(?!(_|/.))|[a-zA-Z0-9]){6,18}[a-zA-Z0-9]$
[a-zA-Z0-9]
ENTONCES un alfanumérico (
_(?!/.)
a _ no seguido de a. O
/.(?!_)
a. no seguido por un _ O
[a-zA-Z0-9]
un alfanumérico) PARA
{6,18}
mínimo 6 a máximo 18 veces ENTONCES
[a-zA-Z0-9]
un alfanumérico
(El primer carácter es alfanumérico, luego de 6 a 18 caracteres, el último carácter es alfanumérico, 6 + 2 = 8, 18 + 2 = 20)
Una ligera modificación a la respuesta de Phillip corrige el último requisito
^[a-zA-Z0-9]([._](?![._])|[a-zA-Z0-9]){6,18}[a-zA-Z0-9]$
^ [a-z0-9 _-] {3,15} $
^ # Inicio de la línea
[a-z0-9_-] # Coincide con los caracteres y símbolos de la lista, az, 0-9, guión bajo, guión
{3,15} # Longitud de al menos 3 caracteres y longitud máxima de 15
$ # Fin de la línea
^(?=.{8,20}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$
└─────┬────┘└───┬──┘└─────┬─────┘└─────┬─────┘ └───┬───┘
│ │ │ │ no _ or . at the end
│ │ │ │
│ │ │ allowed characters
│ │ │
│ │ no __ or _. or ._ or .. inside
│ │
│ no _ or . at the beginning
│
username is 8-20 characters long