How do I check if a value is a valid ISBN-10 or ISBN-13 number in Python using regex and additional validation rules?
Gable E
To check if a value is a valid ISBN-10 or ISBN-13 number in Python using regex and additional validation rules, you can follow these steps:
1. Import the necessary modules:
1
2
3
import re
2. Define a function to check if the value is a valid ISBN-10 or ISBN-13 number with additional validation rules:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def is_valid_isbn(value):
# Remove any hyphens or spaces from the value
value = re.sub(r'[-\s]', '', value)
# Check if the value matches the ISBN-10 or ISBN-13 pattern
isbn_10_pattern = r'^\d{9}[\dX]$'
isbn_13_pattern = r'^\d{13}$'
if re.match(isbn_10_pattern, value) or re.match(isbn_13_pattern, value):
# Additional validation rules
# Add any additional validation rules as per your requirements
if value.startswith('978') and not value.startswith('9780'):
return False
if value.startswith('979') and not value.startswith('9790'):
return False
# Add any other additional validation rules as needed
return True
return False
3. Call theis_valid_isbn function and pass the value to be checked:
1
2
3
4
5
6
7
value = "978-3-16-148410-0"
if is_valid_isbn(value):
print("The value is a valid ISBN-10 or ISBN-13 number and passes the additional validation.")
else:
print("The value is not a valid ISBN-10 or ISBN-13 number or fails the additional validation.")
In theis_valid_isbn function, any hyphens or spaces are removed from the value usingre.sub() to make it consistent with the ISBN format.
The function then checks if the value matches the ISBN-10 or ISBN-13 pattern using regular expressions. The ISBN-10 pattern requires 9 digits followed by either a digit or 'X' as the check digit. The ISBN-13 pattern requires exactly 13 digits.
After the pattern matching, the function proceeds with additional validation rules specific to your requirements. In the example, the function checks if the value starts with '978' but not with '9780' or starts with '979' but not with '9790'. This ensures that the ISBN-13 numbers within the 978 and 979 prefixes adhere to their assigned ranges.
If the value passes both the pattern matching and any additional validation rules specific to your requirements, the function returnsTrue, indicating that the value is a valid ISBN-10 or ISBN-13 number. Otherwise, it returnsFalse.
You can modify the code to include any additional checks or handle different types of input values. This approach allows you to dynamically check if a value is a valid ISBN-10 or ISBN-13 number using regex pattern matching and additional validation rules in your Python programs.