0
<?php
    $string = '395095427174400_558374047513203';
    if(preg_match("/^[0-9][_][0-9]$/",$string)){
        echo "True";
    }else{
        echo "False";
    }
?>

正規表現が一致せず、数字の間にアンダースコアが付くのはなぜですか?

4

3 に答える 3

5

Your regex does match an underscore between numbers, just single digit numbers that is.

/^[0-9][_][0-9]$/

^      # Start of line
[0-9]  # A single digit
[_]    # An underscore 
[0-9]  # A single digit 
$      # End of line

You want to use + to match one or more digits:

/^[0-9]+_[0-9]+$/

^       # Start of line
[0-9]+  # One or more digit
_       # An underscore 
[0-9]+  # One or more digit 
$       # End of line
于 2012-12-02T13:11:36.633 に答える
2

の前のquantifierより多くの数に一致させるために使用する必要があります。そして、あなたは本当にあなたを持っている必要はありません.digitsunderscoreunderscorecharacter class

この正規表現を試すことができます: -

/^[0-9]+_[0-9]+$/
于 2012-12-02T12:57:43.043 に答える
1

あなたのパターン^$は、正規表現エンジンが文字列全体と一致するように制限されており、複数の数字が_あるため、パターンは失敗します。を追加する+[0-9]、他の専門家が次のように提案したように、この問題が解決されます。

/^[0-9]+_[0-9]+$/

また、数字を扱うときに文字クラスを使用することはお勧めしません。正規表現エンジンは\dこの目的でサポートしています。

次のようにパターンを単純化します。

/^\d+_\d+$/

また、アンダースコアが数字の間 (開始と終了ではなく) にのみ発生することが確実である場合は、次のようにさらに単純化できます。

/^_|\d+$/
于 2012-12-03T08:38:17.033 に答える