Number Validation Examples
Learn how to validate numbers (integers and doubles) with Validasi's number validation rules.
Basic Number Validation
Integer Validation
dart
import 'package:validasi/validasi.dart';
import 'package:validasi/rules.dart';
final ageSchema = Validasi.number<int>([
NumberRules.moreThanEqual(0),
NumberRules.lessThanEqual(150),
]);
// Valid
print(ageSchema.validate(25).isValid); // true
print(ageSchema.validate(0).isValid); // true
// Invalid
print(ageSchema.validate(-1).isValid); // false
print(ageSchema.validate(200).isValid); // falseDouble Validation
dart
final priceSchema = Validasi.number<double>([
NumberRules.moreThan(0.0),
NumberRules.lessThan(1000000.0),
]);
// Valid
print(priceSchema.validate(99.99).isValid); // true
print(priceSchema.validate(0.01).isValid); // true
// Invalid
print(priceSchema.validate(0.0).isValid); // false
print(priceSchema.validate(-10.5).isValid); // falseComparison Rules
Greater Than
dart
final positiveSchema = Validasi.number<int>([
NumberRules.moreThan(0),
]);
print(positiveSchema.validate(1).isValid); // true
print(positiveSchema.validate(0).isValid); // false
print(positiveSchema.validate(-1).isValid); // falseGreater Than or Equal
dart
final nonNegativeSchema = Validasi.number<int>([
NumberRules.moreThanEqual(0),
]);
print(nonNegativeSchema.validate(0).isValid); // true
print(nonNegativeSchema.validate(1).isValid); // true
print(nonNegativeSchema.validate(-1).isValid); // falseLess Than
dart
final belowHundredSchema = Validasi.number<int>([
NumberRules.lessThan(100),
]);
print(belowHundredSchema.validate(99).isValid); // true
print(belowHundredSchema.validate(100).isValid); // false
print(belowHundredSchema.validate(101).isValid); // falseLess Than or Equal
dart
final maxHundredSchema = Validasi.number<int>([
NumberRules.lessThanEqual(100),
]);
print(maxHundredSchema.validate(100).isValid); // true
print(maxHundredSchema.validate(99).isValid); // true
print(maxHundredSchema.validate(101).isValid); // falseRange Validation
Simple Range
dart
final percentageSchema = Validasi.number<int>([
NumberRules.moreThanEqual(0),
NumberRules.lessThanEqual(100),
]);
// Valid
print(percentageSchema.validate(0).isValid); // true
print(percentageSchema.validate(50).isValid); // true
print(percentageSchema.validate(100).isValid); // true
// Invalid
print(percentageSchema.validate(-1).isValid); // false
print(percentageSchema.validate(101).isValid); // falseExclusive Range
dart
final temperatureSchema = Validasi.number<double>([
NumberRules.moreThan(-273.15), // Above absolute zero
NumberRules.lessThan(1000.0),
]);
print(temperatureSchema.validate(20.5).isValid); // true
print(temperatureSchema.validate(-273.15).isValid); // falseFinite Number Validation
Check for Finite Values
dart
final finiteSchema = Validasi.number<double>([
NumberRules.finite(),
]);
// Valid
print(finiteSchema.validate(42.0).isValid); // true
print(finiteSchema.validate(-123.456).isValid); // true
print(finiteSchema.validate(0.0).isValid); // true
// Invalid
print(finiteSchema.validate(double.infinity).isValid); // false
print(finiteSchema.validate(double.negativeInfinity).isValid); // false
print(finiteSchema.validate(double.nan).isValid); // falseCombined with Range
dart
final safeDoubleSchema = Validasi.number<double>([
NumberRules.finite(),
NumberRules.moreThanEqual(0.0),
]);
print(safeDoubleSchema.validate(123.45).isValid); // true
print(safeDoubleSchema.validate(double.infinity).isValid); // false
print(safeDoubleSchema.validate(-5.0).isValid); // falseNumber Transformations
Absolute Value
dart
final absSchema = Validasi.number<int>([
Transform((value) => value?.abs()),
NumberRules.lessThanEqual(100),
]);
final result = absSchema.validate(-50);
print(result.isValid); // true
print(result.data); // 50Rounding
dart
final roundedSchema = Validasi.number<double>([
Transform((value) => value?.roundToDouble()),
]);
final result = roundedSchema.validate(3.7);
print(result.data); // 4.0
final result2 = roundedSchema.validate(3.2);
print(result2.data); // 3.0Clamping
dart
final clampedSchema = Validasi.number<int>([
Transform((value) => value?.clamp(0, 100)),
]);
print(clampedSchema.validate(-10).data); // 0
print(clampedSchema.validate(50).data); // 50
print(clampedSchema.validate(150).data); // 100Precision Control
dart
final precisionSchema = Validasi.number<double>([
Transform((value) {
if (value == null) return null;
return (value * 100).round() / 100; // 2 decimal places
}),
]);
final result = precisionSchema.validate(3.14159);
print(result.data); // 3.14Nullable Numbers
dart
final optionalAgeSchema = Validasi.number<int>([
Nullable(),
NumberRules.moreThanEqual(0),
NumberRules.lessThanEqual(150),
]);
// Valid
print(optionalAgeSchema.validate(null).isValid); // true
print(optionalAgeSchema.validate(25).isValid); // true
// Invalid
print(optionalAgeSchema.validate(-1).isValid); // falseReal-World Examples
Price Validation
dart
final priceSchema = Validasi.number<double>([
NumberRules.finite(),
NumberRules.moreThan(0.0),
NumberRules.lessThan(1000000.0),
Transform((value) {
// Round to 2 decimal places
if (value == null) return null;
return (value * 100).round() / 100;
}),
]);
final result = priceSchema.validate(19.999);
print('Valid: ${result.isValid}');
print('Price: \$${result.data}'); // $20.0Rating System
dart
final ratingSchema = Validasi.number<int>([
NumberRules.moreThanEqual(1),
NumberRules.lessThanEqual(5),
InlineRule<int>((value) {
final validRatings = [1, 2, 3, 4, 5];
return validRatings.contains(value)
? null
: 'Rating must be between 1 and 5';
}),
]);
// Valid
print(ratingSchema.validate(5).isValid); // true
// Invalid
print(ratingSchema.validate(0).isValid); // false
print(ratingSchema.validate(6).isValid); // falsePercentage Calculation
dart
final percentSchema = Validasi.number<double>([
NumberRules.moreThanEqual(0.0),
NumberRules.lessThanEqual(100.0),
Transform((value) {
// Round to 1 decimal place
if (value == null) return null;
return (value * 10).round() / 10;
}),
]);
final result = percentSchema.validate(75.678);
print('Percentage: ${result.data}%'); // 75.7%Temperature Validation
dart
final celsiusSchema = Validasi.number<double>([
NumberRules.moreThan(-273.15), // Absolute zero
NumberRules.lessThan(1000.0),
InlineRule<double>((value) {
if (value < -100 || value > 100) {
return 'Unusual temperature value';
}
return null;
}),
]);
print(celsiusSchema.validate(25.5).isValid); // true
print(celsiusSchema.validate(-273.15).isValid); // falseAge Validation
dart
final ageSchema = Validasi.number<int>([
NumberRules.moreThanEqual(0),
NumberRules.lessThanEqual(150),
InlineRule<int>((value) {
if (value < 18) {
return 'Must be at least 18 years old';
}
return null;
}),
]);
print(ageSchema.validate(25).isValid); // true
print(ageSchema.validate(15).isValid); // falseQuantity Validation
dart
final quantitySchema = Validasi.number<int>([
NumberRules.moreThan(0),
NumberRules.lessThanEqual(999),
InlineRule<int>((value) {
if (value > 100) {
return 'Large orders require special handling';
}
return null;
}),
]);
print(quantitySchema.validate(5).isValid); // true
print(quantitySchema.validate(150).isValid); // false (warning)Discount Validation
dart
final discountSchema = Validasi.number<double>([
NumberRules.moreThanEqual(0.0),
NumberRules.lessThan(100.0), // Can't discount 100%
Transform((value) {
// Ensure max 2 decimal places
if (value == null) return null;
return (value * 100).round() / 100;
}),
]);
final result = discountSchema.validate(15.999);
print('Discount: ${result.data}%'); // 16.0%Coordinate Validation
dart
final latitudeSchema = Validasi.number<double>([
NumberRules.moreThanEqual(-90.0),
NumberRules.lessThanEqual(90.0),
]);
final longitudeSchema = Validasi.number<double>([
NumberRules.moreThanEqual(-180.0),
NumberRules.lessThanEqual(180.0),
]);
// Valid coordinates
print(latitudeSchema.validate(37.7749).isValid); // true (SF)
print(longitudeSchema.validate(-122.4194).isValid); // true (SF)
// Invalid
print(latitudeSchema.validate(100.0).isValid); // falseCustom Number Validations
Even Numbers Only
dart
final evenSchema = Validasi.number<int>([
InlineRule<int>((value) {
return value % 2 == 0 ? null : 'Must be an even number';
}),
]);
print(evenSchema.validate(4).isValid); // true
print(evenSchema.validate(5).isValid); // falseMultiple Of
dart
final multipleOfFiveSchema = Validasi.number<int>([
InlineRule<int>((value) {
return value % 5 == 0 ? null : 'Must be a multiple of 5';
}),
]);
print(multipleOfFiveSchema.validate(10).isValid); // true
print(multipleOfFiveSchema.validate(7).isValid); // falsePrime Numbers
dart
bool isPrime(int n) {
if (n < 2) return false;
for (int i = 2; i <= n ~/ 2; i++) {
if (n % i == 0) return false;
}
return true;
}
final primeSchema = Validasi.number<int>([
InlineRule<int>((value) {
return isPrime(value) ? null : 'Must be a prime number';
}),
]);
print(primeSchema.validate(7).isValid); // true
print(primeSchema.validate(8).isValid); // falsePower of Two
dart
final powerOfTwoSchema = Validasi.number<int>([
NumberRules.moreThan(0),
InlineRule<int>((value) {
// Check if value is a power of 2
return (value & (value - 1)) == 0
? null
: 'Must be a power of 2';
}),
]);
print(powerOfTwoSchema.validate(8).isValid); // true
print(powerOfTwoSchema.validate(10).isValid); // falseString to Number Conversion
Parse Integer
dart
final parseIntSchema = Validasi.string([
Transform((value) {
if (value == null) return null;
return int.tryParse(value);
}),
]).pipe(
Validasi.number<int>([
Required(message: 'Invalid number format'),
NumberRules.moreThanEqual(0),
])
);
final result = parseIntSchema.validate('42');
print('Valid: ${result.isValid}');
print('Number: ${result.data}'); // 42Parse Double with Validation
dart
final parseDoubleSchema = Validasi.string([
Transform((value) => value?.trim()),
Transform((value) {
if (value == null) return null;
return double.tryParse(value);
}),
]).pipe(
Validasi.number<double>([
Required(message: 'Invalid decimal number'),
NumberRules.finite(),
NumberRules.moreThanEqual(0.0),
])
);
final result = parseDoubleSchema.validate(' 19.99 ');
print('Valid: ${result.isValid}');
print('Price: ${result.data}'); // 19.99Error Messages
Custom Error Messages
dart
final customSchema = Validasi.number<int>([
NumberRules.moreThanEqual(
0,
message: 'Value cannot be negative'
),
NumberRules.lessThanEqual(
100,
message: 'Value cannot exceed 100'
),
]);
final result = customSchema.validate(-5);
for (var error in result.errors) {
print(error.message); // "Value cannot be negative"
}Context-Aware Messages
dart
final scoreSchema = Validasi.number<int>([
NumberRules.moreThanEqual(0),
NumberRules.lessThanEqual(100),
InlineRule<int>((value) {
if (value < 50) {
return 'Score is below passing grade (50)';
}
if (value < 70) {
return 'Score is acceptable but could be improved';
}
return null; // Score is good
}),
]);