在Laravel验证正则表达式规则中验证纬度/经度 - preg_match():找不到结束分隔符'/'

Lat*_*san 4 php regex latitude-longitude laravel laravel-validation

我正在尝试使用自定义正则表达式规则验证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();
}
Run Code Online (Sandbox Code Playgroud)

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

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+)?)$'
Run Code Online (Sandbox Code Playgroud)

现在我收到这个错误:

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

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

Mar*_*ook 9

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

第二个示例还有一个问题,即需要关闭^来匹配开头^.

  • 这是管道问题,我已经解决了这个问题:''lat'=> ['required','regex:/ ^ [ - ]?(([0-8]?[0-9])\. (\ d +))|(90(\.0 +)?)$ /'],'long'=> ['required','正则表达式:/ ^ [ - ]?((((1 [0-7] [0-9])|([0-9] [0-9]))\(\ d +))|?.?180(\ 0 +))$ /']` (7认同)