DEV Community

Cover image for Demystifying IP Addresses with is.ipv4 and is.not_ipv4 from 'thiis': Your Friendly Guide to IP Validation
Ivan Karbashevskyi
Ivan Karbashevskyi

Posted on

Demystifying IP Addresses with is.ipv4 and is.not_ipv4 from 'thiis': Your Friendly Guide to IP Validation

Welcome, fellow coders, to a fascinating exploration of IP addresses in JavaScript! Today, we'll unravel the secrets of validating IPv4 addresses using the is.ipv4 method and its trusty companion, is.not_ipv4. Get ready for a journey into the world of networking and precision in your JavaScript applications.

Understanding IPv4 Addresses

Image description

Before we dive into the tools at hand, let's take a moment to demystify IPv4 addresses. These addresses are the numerical labels assigned to devices participating in a computer network that uses the Internet Protocol for communication. An IPv4 address consists of four numbers separated by periods, each ranging from 0 to 255.

Meet is.ipv4 - Your IPv4 Validator

Documentation link

Imagine you're working on a project that involves handling IP addresses, and you want to ensure that a given value is a valid IPv4 address. Enter the is.ipv4 method, your trusty IPv4 validator. Let's see it in action:

import { is } from 'thiis'; // Import the "is" object from the "thiis" package

const ipAddress = '192.168.0.1';
const result = is.ipv4(ipAddress);

console.log(result); // true
Enter fullscreen mode Exit fullscreen mode

In this example, we import the "is" object from the "thiis" package and use the is.ipv4 method to confirm that ipAddress is indeed a valid IPv4 address. As expected, it returns true because the value is a valid IPv4 address.

The Grand Tour of Examples

Now, let's embark on a grand tour featuring six captivating examples that showcase the versatility of is.ipv4 and its companion, is.not_ipv4. Buckle up for a mix of practical scenarios!

1. Basic IPv4 Validation

The primary role of is.ipv4 is to validate IPv4 addresses. Use it to check if an address is in the correct format:

import { is } from 'thiis';

const ipAddress = '192.168.0.1';

if (is.ipv4(ipAddress)) {
  // Proceed confidently with the valid IPv4 address.
} else {
  // Handle the case where the address is not valid.
}
Enter fullscreen mode Exit fullscreen mode

2. Guarding Against Non-IPv4 Values

On the flip side, is.not_ipv4 acts as your guardian against non-IPv4 values. Ensure that a value is not an IPv4 address before proceeding:

import { is } from 'thiis';

const questionableValue = someFunctionThatMayReturnNonIPv4Value();

if (is.not_ipv4(questionableValue)) {
  // Your guardian prevents non-IPv4 mishaps!
} else {
  // Time to explore other possibilities.
}
Enter fullscreen mode Exit fullscreen mode

3. Form Validation with is.ipv4

Imagine you're developing a form that requires an IPv4 address. Use is.ipv4 to validate user input:

import { is } from 'thiis';

function validateIpAddress(input) {
  if (is.ipv4(input)) {
    return 'IPv4 address validated successfully!';
  } else {
    return 'Please provide a valid IPv4 address.';
  }
}
Enter fullscreen mode Exit fullscreen mode

4. Handling IP Address Arrays

Arrays are common in programming, and IP addresses can be part of them. Use every() with is.ipv4 to ensure that all elements are valid IPv4 addresses:

import { is } from 'thiis';

const ipAddresses = ['192.168.0.1', '10.0.0.2', '256.256.256.256'];

const allValid = ipAddresses.every(is.ipv4); // false

console.log(allValid);
Enter fullscreen mode Exit fullscreen mode

In this example, allValid checks if all elements in ipAddresses are valid IPv4 addresses. In this case, it returns false because '256.256.256.256' is not a valid IPv4 address.

5. Stream of IPv4 Addresses

Let's spice things up with RxJS and stream$. Using filter and is.ipv4, we can ensure that the stream processes only valid IPv4 addresses:

import { is } from 'thiis';
import { from } from 'rxjs';
import { filter } from 'rxjs/operators';

const ipStream$ = from(['192.168.0.1', 'not an IP', '10.0.0.2', 'invalid.address']);

ipStream$
  .pipe(
    filter(is.ipv4)
  )
  .subscribe(validIp => {
    console.log(validIp); // Only valid IPv4 addresses will be part of the stream's story.
  });
Enter fullscreen mode Exit fullscreen mode

In this example, the filter(is.ipv4) ensures that only valid IPv4 addresses get processed by the stream.

6. Mixing IPv4 and Non-IPv4 in an Array

Arrays may contain a mix of IPv4 and non-IPv4 values. Use some() with is.not_ipv4 to check if at least one element is not a valid IPv4 address:

import { is } from 'thiis';

const mixedAddresses = ['192.168.0.1', 'not an IP', '10.0.0.2'];

const hasNonIPv4 = mixedAddresses.some(is.not_ipv4); // true

console.log(hasNonIPv4);
Enter fullscreen mode Exit fullscreen mode

Here, hasNonIPv4 checks if at least one element in mixedAddresses is not a valid IPv4 address, and it returns true.

7. Additional examples

is.ipv4('192.168.1.1'); // true
is.ipv4('255.255.255.0'); // true
is.ipv4('10.0.0.1'); // true
is.ipv4('172.16.0.1'); // true

is.ipv4(`a`); // false
is.ipv4("r"); // false
is.ipv4('t'); // false
is.ipv4(`3`); // false
is.ipv4(`1`); // false
is.ipv4(`2`); // false
is.ipv4('hello'); // false
is.ipv4('hello123'); // false
is.ipv4('helloWorld'); // false
is.ipv4('a1B2c3d4e5f6g'); // false
is.ipv4('a1B2c3d4e5f6'); // false
is.ipv4('inCamelCase'); // false
is.ipv4('undefined'); // false
is.ipv4('null'); // false
is.ipv4(BigInt(1)) // false
is.ipv4(0) // false
is.ipv4(1) // false
is.ipv4(-1) // false
is.ipv4(Symbol()) // false
is.ipv4(null) // false
is.ipv4(true) // false
is.ipv4([]) // false
is.ipv4(false) // false
is.ipv4("") // false
is.ipv4('') // false
is.ipv4(``) // false
is.ipv4({}) // false
is.ipv4(undefined) // false
is.ipv4(Function) // false
is.ipv4(() => {}) // false
is.ipv4(BigInt) // false
is.ipv4(Symbol) // false
is.ipv4(NaN) // false
is.ipv4(Infinity) // false
is.ipv4(-Infinity) // false
is.ipv4(Number.POSITIVE_INFINITY) // false
is.ipv4(Number.NEGATIVE_INFINITY) // false
// And all other known types will return false
Enter fullscreen mode Exit fullscreen mode
is.not_ipv4('192.168.1.1'); // false
is.not_ipv4('255.255.255.0'); // false
is.not_ipv4('10.0.0.1'); // false
is.not_ipv4('172.16.0.1'); // false

is.not_ipv4(`a`); // true
is.not_ipv4("r"); // true
is.not_ipv4('t'); // true
is.not_ipv4(`3`); // true
is.not_ipv4(`1`); // true
is.not_ipv4(`2`); // true
is.not_ipv4('hello'); // true
is.not_ipv4('hello123'); // true
is.not_ipv4('helloWorld'); // true
is.not_ipv4('a1B2c3d4e5f6g'); // true
is.not_ipv4('a1B2c3d4e5f6'); // true
is.not_ipv4('inCamelCase'); // true
is.not_ipv4('undefined'); // true
is.not_ipv4('null'); // true
is.not_ipv4(BigInt(1)) // true
is.not_ipv4(0) // true
is.not_ipv4(1) // true
is.not_ipv4(-1) // true
is.not_ipv4(Symbol()) // true
is.not_ipv4(null) // true
is.not_ipv4(true) // true
is.not_ipv4([]) // true
is.not_ipv4(false) // true
is.not_ipv4("") // true
is.not_ipv4('') // true
is.not_ipv4(``) // true
is.not_ipv4({}) // true
is.not_ipv4(undefined) // true
is.not_ipv4(Function) // true
is.not_ipv4(() => {}) // true
is.not_ipv4(BigInt) // true
is.not_ipv4(Symbol) // true
is.not_ipv4(NaN) // true
is.not_ipv4(Infinity) // true
is.not_ipv4(-Infinity) // true
is.not_ipv4(Number.POSITIVE_INFINITY) // true
is.not_ipv4(Number.NEGATIVE_INFINITY) // true
// And all other known types will return true
Enter fullscreen mode Exit fullscreen mode

The Adventure's Conclusion

The is.ipv4 and is.not_ipv4 methods from the 'thiis' package are your companions on a thrilling journey into the realm of IPv4 validation in JavaScript. They bring precision to your networking tasks and ensure your code interacts with IPv4 addresses exactly as intended. By adding the 'thi

is' package to your JavaScript toolkit and exploring its documentation for more tips and examples, you can navigate the networking landscape with confidence and a dash of fun.

So, go forth and code with the assurance that your JavaScript applications are equipped to handle IPv4 addresses seamlessly!

πŸŽ— ChatGPT & DALLΒ·E 3

Top comments (1)

Collapse
 
karbashevskyi profile image
Ivan Karbashevskyi

Telegram channel:
t.me/thiis_pkg

NPM:
npmjs.com/thiis