Подтвердить что ты не робот

Регулярное выражение для имени пользователя twitter

Мне нужно регулярное выражение javascript для соответствия именам пользователей.

Имя пользователя вводится пользователем во время регистрации, поэтому я не хочу отвлекать их на слишком много уведомлений об ошибках. Из-за этого мне нужно выражение для соответствия действительным именам пользователей, если у них есть @перед именем пользователя или нет.

Имена пользователей Twitter могут содержать латинские символы, символы подчеркивания и числа, и единственным ограничением может быть до 15 символов. (но мне нужно, чтобы регулярное выражение соответствовало 16 символам, если кто-то входит в @перед именем пользователя).

4b9b3361

Ответ 1

Это должно сделать: ^@?(\w){1,15}$

Ответ 2

Это лучшее решение, которое я нашел, чтобы заменить несколько вхождений имени пользователя twitter.

Регулярное выражение, выполняющее трюк, /(^|[^@\w])@(\w{1,15})\b/. Я поймаю то, что стоит за символом @, поэтому я могу правильно заменить имя пользователя. И я использую глобальный флаг соответствия (g), чтобы он заменил все вхождения. asenovm ответ прост, но не будет работать в большинстве контекстов ввода пользователя, так как techexpert объясняя в свой комментарий.

var output,
    text    = "@RayFranco is answering to @AnPel, this is a real '@username83' but this is [email protected], and this is a @probablyfaketwitterusername",
    regex   = /(^|[^@\w])@(\w{1,15})\b/g,
    replace = '$1<a href="http://twitter.com/$2">@$2</a>';

output = text.replace( regex, replace );

console.log ( output );

Это дает мне то, что я ожидал (тестировался с помощью node v0.9.1):

@RayFranco отвечает на @AnPel, это реальный @username83 ', но это [email protected], и это имя @probablyfaketwitterusername

Это основано на Twitter "specs" для имени пользователя:

Ваше имя пользователя не может быть длиннее 15 символов. Ваше настоящее имя может быть длиннее (20 символов), но имена пользователей сохраняются короче для удобства. Имя пользователя может содержать только буквенно-цифровые символы (буквы A-Z, цифры 0-9), за исключением подчеркивания, как указано выше. Убедитесь, что ваше желаемое имя пользователя не содержит символов, тире или пробелов.

Надеюсь, что это поможет.

Ответ 3

Короткий простой способ сделать это:

function validTwitteUser(sn) {
    return /^[a-zA-Z0-9_]{1,15}$/.test(sn);
}

Ответ 4

Чтобы исключить символы "не латинские" , вы должны использовать: ^@?([a-zA-Z0-9_]){1,15}$. Потому что \w принимает "любые символы слова". И нелатинские символы квалифицируют это условие. Таким образом, он соответствует даже üö как турецкие символы.

Ответ 5

Это может быть больше, чем вам нужно, но я нашел это в другом сообщении regex как заменить ссылки Twitter". Обертывает @usernames, #hashtags и urls. Хорошо работать для меня.

function processTweetLinks(text) {
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi;
    text = text.replace(exp, "<a href='$1' target='_blank'>$1</a>");
    exp = /(^|\s)#(\w+)/g;
    text = text.replace(exp, "$1<a href='https://twitter.com/hashtag/$2?src=hash' target='_blank'>#$2</a>");
    exp = /(^|\s)@(\w+)/g;
    text = text.replace(exp, "$1<a href='http://www.twitter.com/$2' target='_blank'>@$2</a>");
    return text;
}