<?php
$string = '395095427174400_558374047513203';
if(preg_match("/^[0-9][_][0-9]$/",$string)){
echo "True";
}else{
echo "False";
}
?>
正規表現が一致せず、数字の間にアンダースコアが付くのはなぜですか?
<?php
$string = '395095427174400_558374047513203';
if(preg_match("/^[0-9][_][0-9]$/",$string)){
echo "True";
}else{
echo "False";
}
?>
正規表現が一致せず、数字の間にアンダースコアが付くのはなぜですか?
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
の前のquantifier
より多くの数に一致させるために使用する必要があります。そして、あなたは本当にあなたを持っている必要はありません.digits
underscore
underscore
character class
この正規表現を試すことができます: -
/^[0-9]+_[0-9]+$/
あなたのパターン^
で$
は、正規表現エンジンが文字列全体と一致するように制限されており、複数の数字が_
あるため、パターンは失敗します。を追加する+
と[0-9]
、他の専門家が次のように提案したように、この問題が解決されます。
/^[0-9]+_[0-9]+$/
また、数字を扱うときに文字クラスを使用することはお勧めしません。正規表現エンジンは\d
この目的でサポートしています。
次のようにパターンを単純化します。
/^\d+_\d+$/
また、アンダースコアが数字の間 (開始と終了ではなく) にのみ発生することが確実である場合は、次のようにさらに単純化できます。
/^_|\d+$/