# `naisi_coordinates_is_valid`

验证经度、纬度或英文逗号分隔的完整坐标。

经度范围 [-180, 180]，纬度范围 [-90, 90]，包含边界，最多 15 位小数。
支持正负号和首尾 ASCII 空白；不支持科学计数法、中文逗号或数字中的空白。
合并格式必须恰有一个英文逗号、两侧非空，且 $latitude 必须为 null。
null 表示该项不参与校验；两项均为 null、空字符串或任一项非法时返回 false。

## 函数签名

```php
function naisi_coordinates_is_valid(?string $coordinates = null, ?string $latitude = null): bool
```

## 调用前提

应用入口先调用 [naisi_is_ext_license_valid](/web/developers/naisilib/naisi-is-ext-license-valid) 并确认返回 `true`。只验证同一请求内已有的有效 FULL/BASIC 证明；没有证明或证明失效时立即返回失败值，不现场补做完整校验。

授权类别：`LICENSE`；执行模式：`PROOF`。许可不代替登录、租户或权限上下文；身份与数据要求见本页参数及用途说明。

## 参数

### `$coordinates`

- 类型：`?string`
- 必填：否
- 默认值：`null`
- 方向：输入参数。

单独经度或“经度,纬度”文本；null 表示不提供经度，默认 null。

### `$latitude`

- 类型：`?string`
- 必填：否
- 默认值：`null`
- 方向：输入参数。

单独纬度文本；null 表示不提供纬度，默认 null。合并坐标形式下必须为 null。

## 返回值

类型：`bool`

至少提供一项且所有提供的坐标均合法时返回 true，否则返回 false。

## 调用示例

当前请求须满足上方调用前提；请检查实际返回值和引用输出，随机结果及数据包内容以运行环境为准。

```php
$coordinates = '101.000001,11.123456';
$latitude = null;

$result = naisi_coordinates_is_valid($coordinates, $latitude);
var_export($result);
```

## 坐标格式与失败规则

经度范围 `[-180, 180]`，纬度范围 `[-90, 90]`，包含边界，最多 15 位小数。数字格式为可选正负号、至少一位整数，以及可选的小数点和 1～15 位小数；允许前导零和坐标两侧 ASCII 空白。不接受科学计数法、中文逗号、数字内部空白、NUL、`.5`、`1.`、NaN 或 INF。合并形式必须恰有一个英文逗号且两侧非空，第二个参数必须为 `null`。

按十进制数字精确判断边界，不经过浮点转换。原始 PHP 类型不匹配、无参数、空字符串、非法格式、超出范围或未授权返回 `false`；参数数量错误遵循 PHP 规则。

## 升级与相关接口

当前公开接口统一为本函数，旧 `naisi_longitude_is_valid()` 和 `naisi_latitude_is_valid()` 已移除。仅经度传第一个参数；仅纬度使用 `latitude:` 命名参数或传入 `null, $latitude`。

## 版本信息

- 实现模块：`validation`
- 授权类别：`LICENSE` / `PROOF`
- 失败回退：`false`
- 文档同步：`2026-10-18`
