Я уверен, что видел сообщение в Meta или SO, где Джефф опубликовал обновленный алгоритм, который лучше соответствует комментариям, например, когда кто-то вводит комментарий:
@Tom did you see
Это будет соответствовать имени пользователя 'Tom',Если есть специальные символы, скажите, что мое имя пользователя - «T0m», и кто-то печатает @Tom
, оно все равно совпадает.
У кого-нибудь есть ссылка на этот пост, если он действительно существует?Если я правильно помню, это был код, которым он поделился, и это было бы полезно для меня!
В противном случае, учитывая список имен пользователей, которые участвуют в обсуждении:
users[0] = "Tom"
users[1] = "Peanut"
users[2] = "Ashley"
users[3] = "Jon"
users[4] = "AARÓN"
И вам дают@Aaron
или @Aron
в качестве входных данных, каков наилучший способ выбрать правильного пользователя, на которого ссылаются в списке?
Общий алгоритм будет в порядке, но сайт, для которого я делаю это:ASP.net c #, так что если есть пример на этом языке, это было бы замечательно.Это то, что у меня до сих пор, он отлично работает для точных совпадений (все строчные):
// Find comment references
if (Search.Type != Alerts.SectionType.error)
{
// A list of all lower case usernames refered to in this thread
string[] References = Alerts.CommonFunctions.extractReferences(Comment);
// Only proceed if any references are found
if (References.Count() > 0)
{
// Extract all usernames involved in this comment discussion
UserBasic[] UsernamesInThread = getAllUsernamesInThread(Anchor);
// Loop each reference
foreach (string r in References)
{
// Try to find a match
foreach (UserBasic u in UsernamesInThread)
{
// Exact match found
if (r == u.Username)
{
// Check it's not original author (we can then ignore as alert already issued)
if (u.UserID != Search.OriginalAuthorID)
{
Alerts.CommonFunctions.createAlert(u.UserID, Settings.CommentReplyAlertID, Search.URL, Search.Title);
}
break;
}
}
}
}
}