Eliminar la información del dominio de la identificación de inicio de sesión en C #
Pregunta
Me gustaría eliminar la información del dominio / computadora de una identificación de inicio de sesión en C #. Por lo tanto, me gustaría hacer '' Domain \ me '' o "Dominio \ me" solo '' yo ''. Siempre podría verificar la existencia de cualquiera de ellos, y usarlo como índice para iniciar la subcadena ... pero estoy buscando algo más elegante y compacto.
Peor escenario:
int startIndex = 0;
int indexOfSlashesSingle = ResourceLoginName.IndexOf("\");
int indexOfSlashesDouble = ResourceLoginName.IndexOf("\\");
if (indexOfSlashesSingle != -1)
startIndex = indexOfSlashesSingle;
else
startIndex = indexOfSlashesDouble;
string shortName = ResourceLoginName.Substring(startIndex, ResourceLoginName.Length-1);
Solución
cuando todo lo que tienes es un martillo, todo parece un clavo .....
usa una cuchilla de afeitar ----
using System;
using System.Text.RegularExpressions;
public class MyClass
{
public static void Main()
{
string domainUser = Regex.Replace("domain\\user",".*\\\\(.*)", "$1",RegexOptions.None);
Console.WriteLine(domainUser);
}
}
Otros consejos
Podría abusar de la clase Path, por lo tanto:
string shortName = System.IO.Path.GetFileNameWithoutExtension(ResourceLoginName);
Qué tal:
string shortName = ResourceLoginName.Split('\\')[1]
Esto funcionará para ambos pero con grupos con nombre.
^(?<domain>.*)\\(?<username>.*)|(?<username>[^\@]*)@(?<domain>.*)?$
Siempre lo hago de esta manera:
string[] domainuser;
string Auth_User = Request.ServerVariables["AUTH_USER"].ToString().ToLower();
domainuser = Auth_User.Split('\\');
Ahora puede mirar domainuser.Length para ver cuántas partes hay y domainuser [0] para el dominio y domainuser [1] para el nombre de usuario.
string theString = "domain\\me";
theString = theString.Split(new char[] { '\\' })[theString.Split(new char[] { '\\' }).Length - 1];
Esto funciona para ambos inicios de sesión de dominio válidos:
var regex = @"^(.*\\)?([^\@]*)(@.*)?<*>quot;;
var user = Regex.Replace("domain\\user", regex, "$2", RegexOptions.None);
user = Regex.Replace("user@domain.com", regex, "$2", RegexOptions.None);
Piggy backing en la respuesta de Derek Smalls ...
Regex.Replace(User.Identity.Name,@"^(?<domain>.*)\\(?<username>.*)|(?<username>[^\@]*)@(?<domain>.*)?<*>quot;, "${username}", RegexOptions.None)
funcionó para mí.