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.
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.
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.
/in/username
is only if the user has chosen a custom url. Otherwise it looks more like /pub/fname-lname-etc/4/72/8a0
–
Bondswoman 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
https://www.linkedin.com/profile/view?id=12345678
now. –
Ced Following expression will help you with all patterns:
((https?:\/\/)?((www|\w\w)\.)?linkedin\.com\/)((([\w]{2,3})?)|([^\/]+\/(([\w|\d-&#?=])+\/?){1,}))$
Demo
https://www.linkedin.com/in/святий-миколай-bbc1aaa
or https://linkedin.com/in/%D1%81%D0%B2%D1%8F%D1%82%D0%B8%D0%B9-%D0%BC%D0%B8%D0%BA%D0%BE%D0%BB%D0%B0%D0%B9-bbc1aaa
In both these cases this expression will fail. It works well for latin use cases though. For the url-encoded URLs, simply adding the % to the character class [\w|\d-&#?=] can help. –
Tjirebon 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.
/in/username
is only if the user has chosen a custom url. Otherwise it looks more like /pub/fname-lname-etc/4/72/8a0
–
Bondswoman 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 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#!:.?+=&%@!\-\/]))?/;
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.
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);
};
/https?:\/\/(www.)?linkedin.com\/(mwlite\/|m\/)?in\/[a-zA-Z0-9_.-]+\/?/
–
Quackery 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_.-]+\/?/
Use a regex to ensure that the link matches the form taken by linkedin public profiles.
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/
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. –
Rockaway © 2022 - 2024 — McMap. All rights reserved.