Saxonite v1.2.6.2

This commit is contained in:
2022-05-23 18:04:50 +01:00
parent 7965902b14
commit d523628d7f
2 changed files with 218 additions and 0 deletions
@@ -0,0 +1,110 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Sarand.Net.Standard.Base.Helpers;
using System;
using System.Collections.Generic;
using System.Text;
namespace Sacs.UnitTests.Net.Standard.Base.Helpers
{
//=======================================================================
[TestClass]
public class SacsDataValidationHelper_Tester
{
//-------------------------------------------------------------------
// Email addresses.
//-------------------------------------------------------------------
[TestMethod]
public void IsValidEmailAddress()
{
// Valid addresses.
Assert.IsTrue(SacsDataValidationHelper.IsValidEmailAddress("joe@bloggs.com"));
Assert.IsTrue(SacsDataValidationHelper.IsValidEmailAddress("joe@bloggs.xx"));
Assert.IsTrue(SacsDataValidationHelper.IsValidEmailAddress("joe@bloggs.co.uk"));
Assert.IsTrue(SacsDataValidationHelper.IsValidEmailAddress("jb@bloggs.co.uk"));
Assert.IsTrue(SacsDataValidationHelper.IsValidEmailAddress("joe.bloggs@bloggs.co.uk"));
Assert.IsTrue(SacsDataValidationHelper.IsValidEmailAddress("joe-bloggs@bloggs.co.uk"));
Assert.IsTrue(SacsDataValidationHelper.IsValidEmailAddress("joe_bloggs@bloggs.co.uk"));
// Invalid addresses.
Assert.IsFalse(SacsDataValidationHelper.IsValidEmailAddress(null));
Assert.IsFalse(SacsDataValidationHelper.IsValidEmailAddress(""));
Assert.IsFalse(SacsDataValidationHelper.IsValidEmailAddress(" "));
Assert.IsFalse(SacsDataValidationHelper.IsValidEmailAddress("joe"));
Assert.IsFalse(SacsDataValidationHelper.IsValidEmailAddress("joe.bloggs.com"));
Assert.IsFalse(SacsDataValidationHelper.IsValidEmailAddress("joe@bloggs"));
Assert.IsFalse(SacsDataValidationHelper.IsValidEmailAddress("joe@blo ggs.com"));
}
//-------------------------------------------------------------------
// URLs.
//-------------------------------------------------------------------
[TestMethod]
public void IsValidUrl()
{
// Valid addresses.
Assert.IsTrue(SacsDataValidationHelper.IsValidUrl("http://joe.bloggs"));
Assert.IsTrue(SacsDataValidationHelper.IsValidUrl("https://joe.bloggs"));
Assert.IsTrue(SacsDataValidationHelper.IsValidUrl("//joe.bloggs"));
Assert.IsTrue(SacsDataValidationHelper.IsValidUrl("joe.bloggs"));
// Invalid addresses.
Assert.IsFalse(SacsDataValidationHelper.IsValidUrl(null));
Assert.IsFalse(SacsDataValidationHelper.IsValidUrl(""));
Assert.IsFalse(SacsDataValidationHelper.IsValidUrl(" "));
Assert.IsFalse(SacsDataValidationHelper.IsValidUrl("joe"));
Assert.IsFalse(SacsDataValidationHelper.IsValidUrl("joe@bloggs.com"));
}
//-------------------------------------------------------------------
[TestMethod]
public void IsValidWikipediaUrl()
{
// Valid addresses.
Assert.IsTrue(SacsDataValidationHelper.IsValidWikipediaUrl("en.wikipedia.org/wiki/etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidWikipediaUrl("//en.wikipedia.org/wiki/etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidWikipediaUrl("https://en.wikipedia.org/wiki/etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidWikipediaUrl("en.wikipedia.org/w/index.php?etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidWikipediaUrl("//en.wikipedia.org/w/index.php?etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidWikipediaUrl("https://en.wikipedia.org/w/index.php?etc"));
// Invalid addresses.
Assert.IsFalse(SacsDataValidationHelper.IsValidWikipediaUrl(null));
Assert.IsFalse(SacsDataValidationHelper.IsValidWikipediaUrl(""));
Assert.IsFalse(SacsDataValidationHelper.IsValidWikipediaUrl(" "));
Assert.IsFalse(SacsDataValidationHelper.IsValidWikipediaUrl("http://en.wikipedia.org/wiki/"));
Assert.IsFalse(SacsDataValidationHelper.IsValidWikipediaUrl("http://en.wikipedia.org/w/index.php"));
Assert.IsFalse(SacsDataValidationHelper.IsValidWikipediaUrl("htps://www.bbc.co.uk"));
}
//-------------------------------------------------------------------
[TestMethod]
public void IsValidLinkedInUrl()
{
// Valid addresses.
Assert.IsTrue(SacsDataValidationHelper.IsValidLinkedInUrl("www.linkedin.com/in/etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidLinkedInUrl("//www.linkedin.com/in/etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidLinkedInUrl("https://www.linkedin.com/in/etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidLinkedInUrl("en.linkedin.com/in/etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidLinkedInUrl("//en.linkedin.com/in/etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidLinkedInUrl("https://en.linkedin.com/in/etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidLinkedInUrl("xx.linkedin.com/in/etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidLinkedInUrl("//xx.linkedin.com/in/etc"));
Assert.IsTrue(SacsDataValidationHelper.IsValidLinkedInUrl("https://xx.linkedin.com/in/etc"));
// Invalid addresses.
Assert.IsFalse(SacsDataValidationHelper.IsValidLinkedInUrl(null));
Assert.IsFalse(SacsDataValidationHelper.IsValidLinkedInUrl(""));
Assert.IsFalse(SacsDataValidationHelper.IsValidLinkedInUrl(" "));
Assert.IsFalse(SacsDataValidationHelper.IsValidLinkedInUrl("http://www.linkedin.com/in/"));
Assert.IsFalse(SacsDataValidationHelper.IsValidLinkedInUrl("http://xx.linkedin.com/in/"));
Assert.IsFalse(SacsDataValidationHelper.IsValidLinkedInUrl("http://xx.linkedin.com/in/"));
Assert.IsFalse(SacsDataValidationHelper.IsValidLinkedInUrl("linkedin.com/in/"));
Assert.IsFalse(SacsDataValidationHelper.IsValidLinkedInUrl("x.linkedin.com/in/"));
Assert.IsFalse(SacsDataValidationHelper.IsValidLinkedInUrl("xxx.linkedin.com/in/"));
Assert.IsFalse(SacsDataValidationHelper.IsValidLinkedInUrl("htps://www.bbc.co.uk"));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -11,6 +11,8 @@ namespace Sarand.Net.Standard.Base.Helpers
//=======================================================================
public static class SacsDataValidationHelper
{
//-------------------------------------------------------------------
// Email address.
//-------------------------------------------------------------------
/// <summary>
/// Validate the email address.
@@ -33,6 +35,112 @@ namespace Sarand.Net.Standard.Base.Helpers
return true;
}
//-------------------------------------------------------------------
// URL.
//-------------------------------------------------------------------
/// <summary>
/// Validate the URL, including protocol and leading slashes ('//').
/// </summary>
public static bool IsCompleteUrl(String value)
{
if (StringUtil.IsEmpty(value)) return false;
if (!new UrlAttribute().IsValid(value))
return false;
return true;
}
/// <summary>
/// Validate the URL.
/// <para>NB AllowsURL to start with leading slashes ('//'), ie. no protocol ('https:') or to start with the domain (no protocol or slashes).</para>
/// <para>NB Use IsCompleteUrl to validate that protocol and slashes are also present.</para>
/// </summary>
public static bool IsValidUrl(String value)
{
if (StringUtil.IsEmpty((value ?? "").Trim())) return false;
// Ensure that value has at least one dot.
if (Regex.Matches(value, "\\.").Count == 0) return false;
// Ensure that value has no '@ symbols (unless encoded).
if (Regex.Matches(value, "\\@").Count > 0) return false;
// URL validation.
if (!new UrlAttribute().IsValid(value))
{
// URL validation insists on the full URL.
if (!new UrlAttribute().IsValid("//" + value))
{
if (!new UrlAttribute().IsValid("http://" + value))
return false;
}
}
return true;
}
// Wikipedia URLs. [[https:]//]xx.wikipedia.org...
private static readonly Regex reWikipediaUrl = new Regex("^(?:(?:http(?:s)?:)?//)?\\w{2}" + Regex.Escape(".wikipedia.org/wiki/") + ".+", RegexOptions.IgnoreCase);
private static readonly Regex reWikipediaUrl_Alt = new Regex("^(?:(?:http(?:s)?:)?//)?\\w{2}" + Regex.Escape(".wikipedia.org/w/index.php?") + ".+", RegexOptions.IgnoreCase);
public static bool IsValidWikipediaUrl(String value)
{
if (!IsValidUrl(value)) return false;
if (reWikipediaUrl.Matches(value).Count > 0) return true;
if (reWikipediaUrl_Alt.Matches(value).Count > 0) return true;
return false;
}
// LinkedIn URLs. [[https:]//][www|xx].linkedin.com/in...
private static readonly Regex reLinkedInUrl = new Regex("^(?:(?:http(?:s)?:)?//)?(?:(?:www|\\w{2})\\.)?" + Regex.Escape("linkedin.com/in/") + ".+", RegexOptions.IgnoreCase);
private static readonly Regex reLinkedInUrl_Company = new Regex("^(?:(?:http(?:s)?:)?//)?(?:(?:www|\\w{2})\\.)?" + Regex.Escape("linkedin.com/company/") + ".+", RegexOptions.IgnoreCase);
public static bool IsValidLinkedInUrl(String value)
{
if (!IsValidUrl(value)) return false;
if (reLinkedInUrl.Matches(value).Count > 0) return true;
if (reLinkedInUrl_Company.Matches(value).Count > 0) return true;
return false;
}
// Twitter URLs. [[http[s]:]//][wwww.]twitter.com/...
private static readonly Regex reTwitterUrl = new Regex("^(?:(?:http(?:s)?:)?//)?(?:www\\.)?" + Regex.Escape("twitter.com/") + ".+", RegexOptions.IgnoreCase);
public static bool IsValidTwitterUrl(String value)
{
if (!IsValidUrl(value)) return false;
if (reTwitterUrl.Matches(value).Count > 0) return true;
return false;
}
// Facebook URLs. [[https:]//][www.|xx.|xx-xx.]facebook.com/in...
private static readonly Regex reFacebookUrl = new Regex("^(?:(?:http(?:s)?:)?//)?(?:(?:www|\\w{2}|\\w{2}-\\w{2})\\.)?" + Regex.Escape("facebook.com/") + ".+", RegexOptions.IgnoreCase);
public static bool IsValidFacebookUrl(String value)
{
if (!IsValidUrl(value)) return false;
if (reFacebookUrl.Matches(value).Count > 0) return true;
return false;
}
// Instagram URLs. [[https:]//][www.]instagram.com/...
private static readonly Regex reInstagramUrl = new Regex("^(?:(?:http(?:s)?:)?//)?(?:www\\.)?" + Regex.Escape("instagram.com/") + ".+", RegexOptions.IgnoreCase);
public static bool IsValidInstagramUrl(String value)
{
if (!IsValidUrl(value)) return false;
if (reInstagramUrl.Matches(value).Count > 0) return true;
return false;
}
//-------------------------------------------------------------------
/// <summary>
/// Ensure that the website address is a valid URL, ie. at least starts with '//'.
/// <para>To allow the value to be used in an anchor element href attribute.</para>
/// </summary>
public static String QualifyAbsoluteUrl(String url)
{
if (!IsValidUrl(url)) return url;
if (IsCompleteUrl(url)) return url;
if (IsCompleteUrl("https:" + url)) return url;
return "//" + url;
}
//-------------------------------------------------------------------
// Phone number.
//-------------------------------------------------------------------
/// <summary>
/// Validate the phone number.