[英]Regex match longitude value that more than 18 digit
I want to match longitude value: -3.6503552000000004
using preg_match('/^([+\-])?(?:180(?:(?:\.0{1,6})?)|(?:[0-9]|[1-9][0-9]|1[0-7][0-9])(?:(?:\.[0-9]{1,6})?))$/', $value)
but seems my regex can't validate if more than 15 digits behind the dot.我想匹配经度值: -3.6503552000000004
使用preg_match('/^([+\-])?(?:180(?:(?:\.0{1,6})?)|(?:[0-9]|[1-9][0-9]|1[0-7][0-9])(?:(?:\.[0-9]{1,6})?))$/', $value)
但似乎我的正则表达式无法验证点后面是否超过 15 位。
Here the test I did that passed:这里我做的测试通过了:
<?php
namespace Tests\Unit\Rules;
use App\Rules\LongitudeRule;
use Tests\TestCase;
class LongitudeRuleTest extends TestCase
{
/** @test */
public function pass_when_value_between_min_180_to_plus_180()
{
$this->assertTrue((new LongitudeRule)->passes('longitude', '-180'));
$this->assertTrue((new LongitudeRule)->passes('longitude', '+180'));
$this->assertTrue((new LongitudeRule)->passes('longitude', '-45'));
$this->assertTrue((new LongitudeRule)->passes('longitude', '+45'));
$this->assertTrue((new LongitudeRule)->passes('longitude', '0'));
}
/** @test */
public function pass_when_value_between_min_180_to_plus_180_and_float()
{
$this->assertTrue((new LongitudeRule)->passes('longitude', '-180.0'));
$this->assertTrue((new LongitudeRule)->passes('longitude', '+180.0'));
$this->assertTrue((new LongitudeRule)->passes('longitude', '-45.1'));
$this->assertTrue((new LongitudeRule)->passes('longitude', '+45.1'));
$this->assertTrue((new LongitudeRule)->passes('longitude', '0.0'));
}
/** @test */
public function pass_when_value_between_min_180_to_plus_180_and_no_plus_assigned()
{
$this->assertTrue((new LongitudeRule)->passes('longitude', '-180'));
$this->assertTrue((new LongitudeRule)->passes('longitude', '180.0'));
$this->assertTrue((new LongitudeRule)->passes('longitude', '-45.1'));
$this->assertTrue((new LongitudeRule)->passes('longitude', '45'));
}
/** @test */
public function failed_when_value_has_using_comma()
{
$this->assertFalse((new LongitudeRule)->passes('longitude', '45,1'));
$this->assertFalse((new LongitudeRule)->passes('longitude', '-45,1'));
}
/** @test */
public function failed_when_value_is_wrong()
{
$this->assertFalse((new LongitudeRule)->passes('longitude', 'A'));
}
}
I'm new at regex sorry.我是正则表达式的新手,抱歉。 So.?所以。? I do want to say thanks if someone can help?如果有人可以提供帮助,我想说声谢谢?
(?:\.[0-9]{1,6})?
can't match 15 digits as it can only match 1 through 6 digits after a dot.无法匹配 15 位数字,因为它只能匹配点后的 1 到 6 位数字。 So.. need to increase the limit (?:\.[0-9]{1,16})?
所以..需要增加限制(?:\.[0-9]{1,16})?
or remove the limit (?:\.[0-9]+)?
或删除限制(?:\.[0-9]+)?
Thank you @WiktorStribiżew @Rokas谢谢@WiktorStribiżew @Rokas
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.