簡體   English   中英

使用正則表達式進行范圍檢查?

[英]Range checking using regular expressions?

如何使用正則表達式執行范圍檢查?

以一個4位數字(例如"dddd" )為例,如何檢查它是否在給定范圍內,例如[1256-4350]

要檢查輸入是否為4位數字,請使用regex_match ,然后使用std::stoi將字符串轉換為整數以檢查范圍。

std::regex expr(R"(\d{4})");

if(std::regex_match(input, expr)) {
    int num = std::stoi(input);

    if(num >= 1256 && num <= 4350) {
        // input is within range
    }
}   

正如Jarod42在評論中提到的那樣,由於您已經驗證了輸入為4位數字,因此不必將其轉換為整數。 假設inputstd::string ,這也將工作

if(input >= "1256" && input <= "4350") {
    // input is within range
}

使用網站,您需要使用的正則表達式應如下所示: ^(125[6-9]|12[6-9][0-9]|1[3-9][0-9]{2}|[23][0-9]{3}|4[0-2][0-9]{2}|43[0-4][0-9]|4350)$

話雖這么說,我認為它的可讀性和可維護性要大得多,可以將它分為兩​​個步驟,首先是驗證數據類型,然后是范圍。 (當范圍變化時會發生什么?您的整個正則表達式很可能會變得無用)。

是一個很棒的網站,它將為您提供答案。

例如:

(\\b(125[6-9]|12[6-9][0-9]|1[3-9][0-9]{2}|[23][0-9]{3}|4[0-2][0-9]{2}|43[0-4][0-9]|4350)\\b

是的,我知道這行得通。 我只想檢查我們是否可以驗證它確實是一個數字,同時使用

好的,但是不要將正則表達式用於此任務。 這是一個糟糕的選擇。

#include <iostream>
#include <sstream>
using namespace std;


bool is_number_in_range(string s) {
    istringstream str(s);
    int i; char c;
    str >> i;
    if( str.fail() ) return false;
    return i>=1256 && i<=4350 && str.eof();
}

int main() {
    cout<< is_number_in_range("0") << '\n'<<
        is_number_in_range("1234") << '\n'<<
        is_number_in_range("1256") << '\n'<<
        is_number_in_range("2000") << '\n'<<
        is_number_in_range("4350") << '\n'<<
        is_number_in_range("5000") << '\n'<<
        is_number_in_range("abcd") << '\n'<<
        is_number_in_range("1234.0") << '\n';


    return 0;
}

現場觀看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM