LightVx 1.0.0
See the version list below for details.
dotnet add package LightVx --version 1.0.0
NuGet\Install-Package LightVx -Version 1.0.0
<PackageReference Include="LightVx" Version="1.0.0" />
paket add LightVx --version 1.0.0
#r "nuget: LightVx, 1.0.0"
// Install LightVx as a Cake Addin #addin nuget:?package=LightVx&version=1.0.0 // Install LightVx as a Cake Tool #tool nuget:?package=LightVx&version=1.0.0
Light Vx
LightVx is a light,easy and extensible validation framework for .Net that includes a Fluent API.
It's intended to help validating user input in apps, or service requests in Web Services or Web API's, or anywhere you need to validate data.
Author
Tim Wheeler - http://blog.timwheeler.io/
Download
Source on GitHub <br/> Nuget Package <br/>
Built-in Validators
- Aggregate - Combines other validators
- AlphaNumeric - Alphabetical or Numbers
- AlphaText - a to Z and spaces
- Decimal - a decimal value
- Email - email address
- Url - Uri/Url
- Empty - will match an empty string
- HexColor - a valid hex color
- IsNull - matches null
- Length - matches string length. Supply min and max value.
- MaxLength - matches a max string length
- MinLength - matches a min string length
- Max - validates a number is not greater than x. If input is an
Array
orICollection
then it will validate against number of items. - Min - validates a number is not less than x. If input is an
Array
orICollection
then it will validate against number of items. - NotEmpty - must not be empty string
- Numeric - numbers only
- PhoneAndLength - combine phone number validator and length validator
- PhoneNumber - attempts to validate a phone number with optional braces
- SafeText - very restrictive validator that allows a to Z, space, hyphen and apostrophe.
- Url - validates against a valid url
Fluent API
Using the Validator.Eval
method you can call a number of validators.
Example
var input = "123ABC";
Validator.Eval(input, "Customer ID")
.Required()
.IsAlphaNumeric()
.HasLength(6, 6)
.Success((() =>
{
Console.WriteLine("Validation succeeded");
}))
.Fail((errors, validators) =>
{
Console.WriteLine(string.Join(",", errors));
// Validation failed, put your failure logic here
});
For more examples, see below.
Available Methods
- Required() - must not be null or empty string
- HasLength(int min, int? max)
- IsAlphaNumeric()
- IsAlphaText()
- IsDecimal()
- IsEmailAddress()
- IsPhoneNumber()
- IsSafeText()
- IsUrl()
- Min(int value)
- Min(double value)
- Min(decimal value)
- Max(int/double/decimal value)
- IsEmpty()
- IsNotEmpty()
- IsNull()
- IsNotNull()
- HasMinLength(int minLength)
- HasMaxLength(int maxLength)
Fluent API Examples
Example using Result
var input = 100; //user input to be validated
var result = Validator.Eval(input, "Quantity Requested")
.Required()
.Min(50)
.Max(100)
.Validate();
if (result.IsValid == false)
{
Console.WriteLine(string.Join(";", result.ErrorMessages));
//... add failure logic here
}
Inline Example
var input = "https://github.com/TjWheeler/LightVx"; //user input to be validated
Validator.Eval(input, "Source Url")
.Required()
.IsUrl()
.Success((() =>
{
Console.WriteLine("Validation succeeded");
}))
.Fail((errors, validators) =>
{
Console.WriteLine(string.Join(",", errors));
// Validation failed, put your failure logic here
});
Examples using Validation Helper
//WebApi - Validate that the text is matches Alphabet only
var input = "ABC";
string errorMessage;
if (Validator.IsNotValid<AlphaTextValidator>(input, "First Name" , out errorMessage))
{
return BadRequest($"The input is invalid: {errorMessage}");
}
Examples using Validators directly
Note: Although you can call the validators directly, using the Validation
helper is more convenient.
//Validate numberic
string input = "123ABC";
IValidator validator = new NumericValidator();
validator.Validate(input, "My Field Name");
if (!validator.IsValid)
{
Console.WriteLine("Input: " + input + " return error (" + validator.ErrorMessage + ")");
}
Extending and creating your own validators
In the following example, we are inheriting from an AggregateValidator
, this allows us to combine validators.
Creating a Post Code Validator by combining other validators.
//Step 1: Add the custom validator
public class PostCodeValidator : AggregatedValidator
{
public PostCodeValidator()
{
AddValidator(new LengthValidator(4, 4));
AddValidator(new NumericValidator());
}
}
//Step 2: Add an extension method
public static class PostCodeValidatorExtension
{
public static ValidatorFluent IsPostCode(this ValidatorFluent fluentApi)
{
fluentApi.AddValidator(new PostCodeValidator());
return fluentApi;
}
}
//Step 3: Call it to validate input
public void ExampleCustomValidator()
{
string input = "...";
var isValid = Validator.Eval(input, "MyFieldName")
.Required()
.IsPostCode()
.Fail(((errors, validators) =>
{
Console.WriteLine("Example failure: " + string.Join(";", errors));
})).IsValid;
}
Creating your own validator
Create a class and inherit ValidatorBase
. The only method you need to implement is Validate
. There are some base methods that will make it easy to validate using Regular Expressions. Here's an example of one of the built in validators.
/// <summary>
/// Validate Email Addresses
/// </summary>
public class EmailValidator : ValidatorBase
{
protected override string Expression => @"^([\&\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
protected override void Validate()
{
if (_Input == null || (string) _Input == string.Empty)
{
Succeed();
return;
}
if (SingleMatch((string) _Input))
Succeed();
else
Fail("is not a valid email address.");
}
}
When using Regular expressions you can also use the HasMatch
and MatchCount
base methods.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
4.0.1 | 7,370 | 4/20/2023 |
4.0.0 | 352 | 2/10/2023 |
3.1.0 | 367 | 1/21/2023 |
3.0.3 | 326 | 1/21/2023 |
3.0.2 | 304 | 1/20/2023 |
3.0.1 | 7,905 | 7/24/2022 |
3.0.0 | 454 | 7/24/2022 |
2.0.8 | 450 | 7/23/2022 |
2.0.7 | 480 | 7/13/2022 |
2.0.6 | 471 | 6/19/2022 |
2.0.5 | 522 | 4/27/2022 |
2.0.4 | 454 | 4/15/2022 |
2.0.3 | 608 | 11/16/2020 |
2.0.2 | 688 | 5/28/2020 |
2.0.1 | 503 | 5/22/2020 |
2.0.0 | 514 | 4/21/2020 |
1.2.0 | 1,779 | 5/4/2018 |
1.1.1 | 1,038 | 4/27/2018 |
1.1.0 | 1,134 | 3/8/2018 |
1.0.3 | 913 | 2/20/2018 |
1.0.2 | 1,101 | 2/12/2018 |
1.0.1 | 998 | 2/11/2018 |
1.0.0 | 976 | 2/11/2018 |
Initial release.