In this article we will be seeing how to do custom validation for site column in SharePoint using power shell and SharePoint object model.
I have created a list "Resume" where the users can upload the resume and will be filling some basic details. I have four columns: 
- 
Name 
 
- 
Email ID 
 
- 
Mobile No 
 
- 
Years of experience 
I am going to do some custom validation for "Years of experience" column. Only users who have experience of 3-6 years can upload the resume.
I have created a custom validation as shown in the following which has the Formula and User message (where you can display some custom error message).
Go to SharePoint site -> List -> List Settings -> Columns -> click on the column to edit. 

If Years of experience value is not between 3-6 years it will throw a custom error message as shown in the following.

Using SharePoint object model you can achieve the same thing as shown in the following. 
using (SPSite site = new SPSite("http://serverName:1111/sites/SPSiteDataQuery/ "))
{
    using (SPWeb web = site.OpenWeb("Subsite1"))
    {
         SPList list = web.Lists.TryGetList("Resume");
         if (list != null)
         {
             SPFieldNumber fieldNumber = list.Fields.GetField("Years of experience") as SPFieldNumber;
             fieldNumber.ValidationFormula = "=AND([Years of experience]>3,[Years of experience]<6)";
             fieldNumber.ValidationMessage = "Years of experience must be 3-6 years";
             fieldNumber.Update();
         }
         else
         {
             Console.WriteLine("List does not exist in the site");
         }
             Console.ReadLine();
    }
} 
Using Power shell
$siteURL="http://serverName:1111/sites/SPSiteDataQuery/"
$listName="Resume"
$fieldName="Years of experience"
$validationFormula="=AND([Years of experience]>3,[Years of experience]<6)"
$validationMessage="Years of experience must be 3-6 years"
$site=Get-SPSite $siteURL
$web=$site.OpenWeb("Subsite1")
$list=$web.Lists.TryGetList($listName)
if($list -ne $null)
{
    $fieldNumber=$list.Fields.GetField($fieldName)
    $fieldNumber.ValidationFormula = $validationFormula
    $fieldNumber.ValidationMessage = $validationMessage
    $fieldNumber.Update()
    write-host -f green "Custom Validation added to the "$fieldName " successfully" 
}
else
{
    write-host -f yellow $listName "does not exist in the site"
} 
