如何使用正則表示式驗證ISIN?
在這個問題中,我們將使用正則表示式在 C++ 中驗證 ISIN 編號。
ISIN 代表國際證券識別號碼。它是一個用於識別股票、金融債券等的唯一程式碼。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 字串有效,則列印“是”。否則,列印“否”。
示例
#include <bits/stdc++.h>
#include <regex>
using namespace std;
void ISINValidation(string isinStr) {
// Define the ReGex pattern for isinStr
const regex isinPat("^[A-Z]{2}[-]{0,1}[A-Z0-9]{9}[-]{0,1}[0-9]{1}$");
// For empty string
if (isinStr.empty()) {
cout << "The ISIN string is empty\n";
}
// Matching the string with regex
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) {
// Define the ReGex pattern for isinStr
const regex isinPat("^[A-Z]{2}[-]{0,1}[A-Z0-9]{9}[-]{0,1}\\d$");
// For empty string
if (isinStr == "") {
return false;
}
// Matching the string with regex
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() 方法可能會給出錯誤的輸出。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP