给定字符串str ,任务是使用正则表达式检查给定的字符串是否为有效的万事达卡号。
有效的主卡号必须满足以下条件。
- 它应该是16位数字长。
- 它应该以两位数开头,范围从51到55,或者以两位数开头,范围从2221到2720。
- 对于51到55,接下来的14位数字应该是介于0到9之间的任何数字。
- 在2221至2720的情况下,接下来的12位数字应为0-9之间的任意数字。
- 它不应包含任何字母和特殊字符。
例子:
Input: str = “5114496353984312”;
Output: true
Explanation:
The given string satisfies all the above mentioned conditions. Therefore, it is a valid Master Card number.
Input: str = “5582822410”;
Output: false
Explanation:
The given string has 10 digits. Therefore, it is not a valid Master Card number.
Input: str = “6082822463100051”;
Output: false
Explanation:
The given string does not start with either two digits number may range from 51 to 55 or four digits number may range from 2221 to 2720. Therefore, it is not a valid Master Card number.
方法:想法是使用正则表达式解决此问题。可以按照以下步骤计算答案。
- 获取字符串。
- 创建一个正则表达式以检查有效的主卡号,如下所述:
regex = “^5[1-5][0-9]{14}|^(222[1-9]|22[3-9]\\d|2[3-6]\\d{2}|27[0-1]\\d|2720)[0-9]{12}$”;
- 在哪里:
- ^表示字符串的开头。
- 5 [1-5]表示前两位数字的范围可以从51到55。
- [0-9] {14}表示接下来的14位数字应介于0-9之间。
- |代表or。
- (代表小组的开始。
- 222 [1-9]表示前四位数字的范围可能是2221至2229。
- |代表or。
- 22 [3-9] \\ d表示前四位数字,范围为2230至2299。
- |代表or。
- 2 [3-6] \\ d {2}表示前四位数字,范围为2300至2699。
- |代表or。
- 27 [0-1] \\ d表示前四位数字,范围为2700至2719。
- |代表or。
- 2720表示前四位数可以以2720开头。
- )代表群组的结尾。
- [0-9] {12}表示接下来的十二个数字应介于0-9之间。
- $表示字符串的结尾。
- 将给定的字符串与正则表达式匹配。
在Java,这可以通过使用Pattern.matcher()来完成
在C++中,可以使用regex_match()完成此操作 - 如果字符串与给定的正则表达式匹配,则返回true;否则返回false。
下面是上述方法的实现:
C++
// C++ program to validate
// Master Card number
// using Regular Expression
#include
#include
using namespace std;
// Function to validate Master Card number
bool isValidMasterCardNo(string str)
{
// Regex to check valid Master Card number
const regex pattern("^5[1-5][0-9]{14}|^(222[1-9]|22[3-9]\\d|2[3-6]\\d{2}|27[0-1]\\d|2720)[0-9]{12}$");
// If the Master Card number
// is empty return false
if (str.empty())
{
return false;
}
// Return true if the Master Card number
// matched the ReGex
if(regex_match(str, pattern))
{
return true;
}
else
{
return false;
}
}
// Driver Code
int main()
{
// Test Case 1:
string str1 = "5114496353984312";
cout << isValidMasterCardNo(str1) << endl;
// Test Case 2:
string str2 = "2720822463109651";
cout << isValidMasterCardNo(str2) << endl;
// Test Case 3:
string str3 = "5582822410";
cout << isValidMasterCardNo(str3) << endl;
// Test Case 4:
string str4 = "6082822463100051";
cout << isValidMasterCardNo(str4) << endl;
// Test Case 5:
string str5 = "2221149a635##843";
cout << isValidMasterCardNo(str5) << endl;
return 0;
}
// This code is contributed by yuvraj_chandra
Java
// Java program to validate
// Master Card number
// using regular expression
import java.util.regex.*;
class GFG {
// Function to validate
// Master Card number
// using regular expression.
public static boolean
isValidMasterCardNo(String str)
{
// Regex to check valid
// Master Card number.
String regex = "^5[1-5][0-9]{14}|"
+ "^(222[1-9]|22[3-9]\\d|"
+ "2[3-6]\\d{2}|27[0-1]\\d|"
+ "2720)[0-9]{12}$";
// Compile the ReGex
Pattern p
= Pattern.compile(regex);
// If the string is empty
// return false
if (str == null) {
return false;
}
// Find match between given string
// and regular expression
// using Pattern.matcher()
Matcher m = p.matcher(str);
// Return if the string
// matched the ReGex
return m.matches();
}
// Driver code
public static void main(String args[])
{
// Test Case 1:
String str1 = "5114496353984312";
System.out.println(
isValidMasterCardNo(str1));
// Test Case 2:
String str2 = "2720822463109651";
System.out.println(
isValidMasterCardNo(str2));
// Test Case 3:
String str3 = "5582822410";
System.out.println(
isValidMasterCardNo(str3));
// Test Case 4:
String str4 = "6082822463100051";
System.out.println(
isValidMasterCardNo(str4));
// Test Case 5:
String str5 = "2221149a635##843";
System.out.println(
isValidMasterCardNo(str5));
}
}
Python3
# Python3 program to validate
# Master Card number
# using regular expression
import re
# Function to validate
# Master Card number
# using regular expression.
def isValidMasterCardNo(str):
# Regex to check valid
# Master Card number.
regex = "^5[1-5][0-9]{14}|" +
"^(222[1-9]|22[3-9]\\d|" +
"2[3-6]\\d{2}|27[0-1]\\d|" +
"2720)[0-9]{12}$"
# Compile the ReGex
p = re.compile(regex)
# If the string is empty
# return false
if (str == None):
return False
# Return if the string
# matched the ReGex
if(re.search(p, str)):
return True
else:
return False
# Driver code
# Test Case 1:
str1 = "5114496353984312"
print(isValidMasterCardNo(str1))
# Test Case 2:
str2 = "2720822463109651"
print(isValidMasterCardNo(str2))
# Test Case 3:
str3 = "5582822410"
print(isValidMasterCardNo(str3))
# Test Case 4:
str4 = "6082822463100051"
print(isValidMasterCardNo(str4))
# Test Case 5:
str5 = "2221149a635##843"
print(isValidMasterCardNo(str5))
# This code is contributed by avanitrachhadiya2155
true
true
false
false
false