如何使用正则表达式验证 ISIN?

data structurec++server side programmingprogramming

在本题中,我们将使用正则表达式在 C++ 中验证 ISIN 号码。

ISIN 代表国际证券识别号码 (International Securities Identification Number)。它是用于识别股票、金融债券等的唯一代码。ISIN 号码的长度可以是 12 位或 14 位,这确保了特定商品的国际识别。

让我们了解一下 ISIN 号码的格式。

  • 国家代码 − 以国家代码的两个字符开头。

  • 标识符 − 国家代码后包含 9 个字母数字字符。

  • 校验和 − 包含用于检测 ISIN 号码中错误的一位数字。

  • 国家代码和标识符后可能包含连字符 (-)。

问题描述 − 我们给出了字符串格式的 ISIN 号码。我们需要使用正则表达式验证 ISIN 号码。

示例

输入

str1 = "SB0123456A98"

输出

Yes

说明

该 ISIN 号码有效,因为它符合 ISIN 代码的所有规则。

输入

str1 = "US-01207199D-8"

输出

Yes

解释

这是一个有效的 ISIN 号码。

输入

str1 = "USerw01207199D8"

输出

No

解释

标识符的长度为 12。因此,这是一个无效的 ISIN号码。

用户可以使用以下正则表达式来验证 ISIN 号码。

^[A-Z]{2}[-]{0,1}[A-Z0-9]{9}[-]{0,1}[0-9]{1}$
  • ^ − 正则表达式的开头。

  • [A-Z]{2} − 两个字符的国家代码。

  • [-]{0,1} − 可以包含连字符 (-)。

  • [A-Z0-9]{9} − 长度为 9 的标识符,包含从 A 到 Z 和 0 到 9 的字符。

  • [0-9]{1} − 一个校验和数字

  • $ − 正则表达式结束。

方法 1

在此方法中,我们将使用 C++ 的"regex"库从字符串创建正则表达式模式,并使用 regex_match() 方法来验证 ISIN 号码。

算法

  • 步骤 1 − 如上所述,定义名为"isinPat"的正则表达式。

  • 步骤 2 − 如果字符串为空,则打印"无效字符串"。

  • 步骤 3 − 将 ISIN 号码字符串作为第一个参数,将搜索模式作为第二个参数传递后,执行 regex_match() 方法。

  • 步骤 4 − 如果 ISIN 字符串有效,则打印"Yes"。否则,打印"No"。

示例

#include <bits/stdc++.h>
#include <regex>
using namespace std;

void ISINValidation(string isinStr) {
    // 定义 isinStr 的正则表达式模式
    const regex isinPat("^[A-Z]{2}[-]{0,1}[A-Z0-9]{9}[-]{0,1}[0-9]{1}$");
    
    // 对于空字符串
    if (isinStr.empty()) {
    	cout << "The ISIN string is empty\n";
    }
    
    // 使用正则表达式匹配字符串
   if (regex_match(isinStr, isinPat)) {
      cout << "The ISIN string " << isinStr << " is valid\n";
   } else {
      cout << "The ISIN string " << isinStr << " is invalid\n";
   }
}
int main() {
   string str1 = "SB0123456A98";
   ISINValidation(str1);
   string str2 = "US-01207199D-8";
   ISINValidation(str2);
   return 0;
}

输出

The ISIN string SB0123456A98 is valid
The ISIN string US-01207199D-8 is valid

时间复杂度 – O(N),与 regex_match() 方法的时间复杂度相同。

空间复杂度 – O(1)

方法 2

此方法使用 regex_search() 方法验证 ISIN 号码。当 regex_search() 方法在字符串中找到第一个与模式匹配的字符串时,它会返回 true。

算法

  • 步骤 1 - 如果字符串为空,则返回 false。

  • 步骤 2 - 使用 regex_search() 方法验证 ISIN 字符串。

  • 步骤 3 - 如果 ISIN 字符串有效,则函数返回 true。否则,返回 false。

示例

#include <bits/stdc++.h>
#include <regex>
using namespace std;

bool ISINValidation(string isinStr) {
    // 定义 isinStr 的正则表达式模式
    const regex isinPat("^[A-Z]{2}[-]{0,1}[A-Z0-9]{9}[-]{0,1>\\d$");
    
    // 空字符串
    if (isinStr == "") {
        return false;
    }
    
    // 使用正则表达式匹配字符串
   if (regex_search(isinStr, isinPat)) {
      return false;
   } else {
      return true;
   }
}
int main() {
   string str1 = "SB0123456A98";
   if (ISINValidation(str1)) {
      cout << "The ISIN number " << str1 << " is valid" << endl;
   } else {
      cout << "The ISIN number " << str1 << " is not valid" << endl;
   }
   return 0;
}

输出

The ISIN number SB0123456A98 is not valid

时间复杂度 – 在字符串中搜索模式的复杂度为 O(N)。

空间复杂度 – O(1)

regex_match() 将完整字符串与模式匹配,而 regex_search() 则在部分匹配的情况下返回 true。因此,在某些情况下,regex_search() 方法可能会给出错误的输出。


相关文章