【问题标题】:Validating latitude/longitude in Laravel validation regex rule - preg_match(): No ending delimiter '/' found [duplicate]在 Laravel 验证正则表达式规则中验证纬度/经度 - preg_match():未找到结束分隔符“/”[重复]
【发布时间】:2018-04-21 10:11:30
【问题描述】:

我正在尝试使用自定义正则表达式规则验证 Laravel 5.4 项目中的纬度/经度(基于此答案:https://stackoverflow.com/a/22007205/2332336

// Create validation
$validator = Validator::make($request->all(), [
    // ...
    'lat' => 'required|regex:/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/',
    'long' => 'required|regex:/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/'
], [
    'lat.regex' => 'Latitude value appears to be incorrect format.',
    'long.regex' => 'Longitude value appears to be incorrect format.'
]);

// Test validation
if ($validator->fails()) {
    return redirect()
        ->back()
        ->withErrors($validator)
        ->withInput();
}

运行时,我收到以下错误:

preg_match(): 没有找到结束分隔符'/'

我也试过这个;

    'lat' => 'required|regex:^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$',
    'long' => 'required|regex:^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$'

现在我收到此错误:

preg_match(): 没有找到结束分隔符 '^'

通过自定义正则表达式规则在 laravel 中验证 lat/lng 的正确语法是什么?

【问题讨论】:

  • 看起来你必须使用数组?
  • 按范围验证可能更简单,例如:'lat' => 'between:-87,89', 'long' => 'between:-180,180',

标签: php regex laravel latitude-longitude laravel-validation


【解决方案1】:

可能是管道有问题吗?例如,参见Laravel 5.4 - Validation with Regex。我看到您的正则表达式中有一个管道字符。尝试将规则分成一个数组,而不是在这里使用管道:required|regex

在第二个示例中,第一个 ^ 被解释为正则表达式字符串的开头字符,因此它期望最后一个 ^ 与之匹配。

【讨论】:

  • 这是管道问题,我已经这样解决了:'lat' => ['required','regex:/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/'], 'long' => ['required','regex:/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/']
  • 确认上述正则表达式可用于坐标验证,谢谢!
猜你喜欢
  • 2020-08-02
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 2014-04-23
  • 1970-01-01
  • 2014-05-08
相关资源
最近更新 更多