13

I am looking for a way to validate a link to make sure that it is pointing to a LinkedIn public profile page in PHP.

I have a website and I would like my users to be able to share their LinkedIn profile in their profile on my website.

The Nail
  • 8,355
  • 2
  • 35
  • 48
maaudet
  • 2,338
  • 4
  • 20
  • 28
  • I created the class to [validate the linkedin url](https://github.com/gchokeen/linkedinURLValidator). – Gowri Sep 13 '13 at 10:28

10 Answers10

6

I've found a number of ways the profile url can look like:

http://uk.linkedin.com/pub/some-name/1/1b3/b45/
http://nl.linkedin.com/pub/other-name/11/223/544
http://www.linkedin.com/in/aname/
http://www.linkedin.com/in/another-name
http://linkedin.com/in/name
http://nl.linkedin.com/in/name
http://nl.linkedin.com/in/name/

I've used this regex to describe it:

^https?://((www|\w\w)\.)?linkedin.com/((in/[^/]+/?)|(pub/[^/]+/((\w|\d)+/?){3}))$

It is not strict-strict but it got me home.

edit
- Added https support

Kees C. Bakker
  • 32,294
  • 27
  • 115
  • 203
6

Following expression will help you with all patterns:

((https?:\/\/)?((www|\w\w)\.)?linkedin\.com\/)((([\w]{2,3})?)|([^\/]+\/(([\w|\d-&#?=])+\/?){1,}))$

Demo

https://regex101.com/r/oT7iM2/5

durron597
  • 31,968
  • 17
  • 99
  • 158
Nikhil
  • 213
  • 4
  • 18
5

Try something like this where $username is the linked-in username. You also can set $profileurl directly to the link given and verify with str_pos that is starts with http://www.linkedin.com/in/

$profileurl = "http://www.linkedin.com/in/".$username;

$fp = curl_init($profileurl);
$response = curl_exec($fp);
$response_code = curl_getinfo($fp, CURLINFO_HTTP_CODE);
$validprofile = ($response_code == 200);

$validprofile will be a boolean indicating if the profile is valid.

Alex
  • 32,506
  • 16
  • 106
  • 171
  • 7
    don't forget `/in/username` is only if the user has chosen a custom url. Otherwise it looks more like `/pub/fname-lname-etc/4/72/8a0` – codercake May 21 '13 at 21:36
4

I use another regular expression more permisive:

^(http(s)?:\/\/)?([\w]+\.)?linkedin\.com\/(pub|in|profile)

It includes URLs without squeme and all samples from other answers. You can make any variation here http://regex101.com/r/vE8tV7

  • This breaks for search urls like http://www.linkedin.com/pub/dir/+/semnani/us-49-greater-los-angeles-area – Karthik T Oct 08 '15 at 08:05
  • What about this one: https://regex101.com/r/vE8tV7/38 Only pub is missing as until now, I haven't found any url like that. – spa900 Jul 03 '19 at 03:44
3

This is tested regular expression that I use on my website. I fit all the variations that currently exist.

var linkedin=/(https?)?:?(\/\/)?(([w]{3}||\w\w)\.)?linkedin.com(\w+:{0,1}\w*@)?(\S+)(:([0-9])+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
Ivijan Stefan Stipić
  • 6,249
  • 6
  • 45
  • 78
  • How can you make http/https/ftp protocol optional in this? what if someone just enters www.linkedin.com/their-profile-name, without http. Apart from that this works. – zookastos Aug 18 '16 at 16:34
  • @NalinAgrawal You can use any URL combination and you will get right result. I change a bit code but pattern is the same. If you understand regex, you will se that work with or without http, https and www – Ivijan Stefan Stipić Dec 28 '17 at 12:42
2

This covers most LinkedIn profile URLs (Javascript RegEx):

// Generic RegEx exact match validator
export const isRegexExactMatch = (value, regexp) => {
  const res = value.match(regexp);
  return res && res[0] && res[0] === res.input;
};

const isLinkedinProfileUrl = (value) => {
  const linkedInProfileURLRegExp =
    '(https?:\\/\\/(www.)?linkedin.com\\/(mwlite\\/|m\\/)?in\\/[a-zA-Z0-9_.-]+\\/?)';
  return !!isRegexExactMatch(value, linkedInProfileURLRegExp);
};
Daniel Aviv
  • 139
  • 1
  • 6
  • is show me error when I put it in my code, I think you add extra "/" updated regex it ```/https?:\/\/(www.)?linkedin.com\/(mwlite\/|m\/)?in\/[a-zA-Z0-9_.-]+\/?/``` – AliRehman7141 Jun 17 '21 at 20:38
2

There a very nice examples on the developer API pages http://developer.linkedin.com/

This http://developer.linkedin.com/plugins/member-profile-plugin could be what your looking for.

tripplet
  • 335
  • 1
  • 11
1

I have this for all kind of URLs for Linkedin for javascript

export const isValidLinkedinUrl = (url) => {
  return /(https?:\/\/(www.)|(www.))?linkedin.com\/(mwlite\/|m\/)?in\/[a-zA-Z0-9_.-]+\/?/.test(url);
};

only RegExp

/(https?:\/\/(www.)|(www.))?linkedin.com\/(mwlite\/|m\/)?in\/[a-zA-Z0-9_.-]+\/?/
AliRehman7141
  • 873
  • 3
  • 12
  • 33
0

I've simply used the following regex:

http(s)?:\/\/([w]{3}\.)?linkedin\.com\/in\/([a-zA-Z0-9-]{5,30})\/?

According to the latest Linkedin documentation custom profile url can have 5-30 letters or numbers.

It works for the following list of url:

https://www.linkedin.com/in/your-profile-5-30-length/
https://linkedin.com/in/your-profile-5-30-length/
http://www.linkedin.com/in/your-profile-5-30-length/
http://linkedin.com/in/your-profile-5-30-length/
Oleh Udovytskyi
  • 300
  • 1
  • 2
  • 10
  • The documentation still says this, but it is outdated or inaccurate. https://linkedin.com/in/eee https://linkedin.com/in/abc –  Sep 05 '19 at 20:48
  • Note that `https://www.linkedin.com/in/%D0%B0%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80-%D0%B1%D0%BE%D0%B1%D1%8B%D0%BB%D0%B5%D0%B2-45456994/` is valid, which (since most systems will parse the UTF-8 cyrillic unicode chars as, say, %NN chars) is way more than 30 chars, or even 90 chars. – Dewi Morgan Sep 19 '19 at 23:04
0

Use a regex to ensure that the link matches the form taken by linkedin public profiles.

jakx
  • 748
  • 5
  • 8