# `naisi_string_is_valid`

使用指定内置验证器及可选最小/最大 Unicode 字符数验证字符串。

与 naisi_value_is_valid() 使用相同的 LICENSE / PROOF 策略和 DATA capability；
需要本请求已有有效的 FULL 或 BASIC 证明，不额外要求租户或用户身份。
负数长度或 maxlength > 0 且 minlength > maxlength 返回 false；0 表示不限制对应边界。
共享全部 NAISI_VALIDATOR_* 规则，严格全串匹配，不 trim；CONTENT 保留多行文本支持。
不接收自定义正则字符串。仅执行内存中的字符串校验，不写业务数据；
请求证明的检查及 PCRE2 依赖加载沿用 naisi_value_is_valid() 的生命周期。

## 函数签名

```php
function naisi_string_is_valid(string $string, int $validator, int $minlength = 0, int $maxlength = 0): bool
```

## 调用前提

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

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

## 参数

### `$string`

- 类型：`string`
- 必填：是
- 默认值：无
- 方向：输入参数。

需要验证的 UTF-8 字符串；空字符串返回 false。

### `$validator`

- 类型：`int`
- 必填：是
- 默认值：无
- 方向：输入参数。

与 naisi_value_is_valid() 相同的 NAISI_VALIDATOR_* 选择器。

### `$minlength`

- 类型：`int`
- 必填：否
- 默认值：`0`
- 方向：输入参数。

最小 Unicode 字符数，包含边界；大于 0 时启用，默认 0 表示不限制。

### `$maxlength`

- 类型：`int`
- 必填：否
- 默认值：`0`
- 方向：输入参数。

最大 Unicode 字符数，包含边界；大于 0 时启用，默认 0 表示不限制。

## 返回值

类型：`bool`

字符串非空、匹配验证器且满足长度限制时返回 true；未授权、输入无效或验证失败时返回 false。

## 关联常量

- [`NAISI_VALIDATOR_ALPHA_DASH`](/web/developers/naisilib/const#naisi-validator-alpha-dash) = `1` — 小写字母与连字符验证正则。 匹配以小写字母开头和结尾、内部可包含连字符的字符串。
- [`NAISI_VALIDATOR_SLUG`](/web/developers/naisilib/const#naisi-validator-slug) = `2` — URL slug 验证正则。 匹配以小写字母开头，可包含小写字母、数字和连字符的 slug。
- [`NAISI_VALIDATOR_ALPHA_UNDERSCORE`](/web/developers/naisilib/const#naisi-validator-alpha-underscore) = `3` — 小写字母与下划线验证正则。 匹配以小写字母开头和结尾、内部可包含下划线的字符串。
- [`NAISI_VALIDATOR_ALPHA_NUMBER_UNDERSCORE`](/web/developers/naisilib/const#naisi-validator-alpha-number-underscore) = `4` — 小写字母、数字与下划线验证正则。 匹配以小写字母开头，并由小写字母、数字和下划线组成的字符串。
- [`NAISI_VALIDATOR_PINYIN`](/web/developers/naisilib/const#naisi-validator-pinyin) = `5` — 拼音字符串验证正则。 匹配由小写拼音片段组成、片段之间使用单个空白分隔的字符串。
- [`NAISI_VALIDATOR_STRING`](/web/developers/naisilib/const#naisi-validator-string) = `6` — 通用单行字符串验证正则。 要求内容非空，并排除换行、控制字符以及部分高风险字符。
- [`NAISI_VALIDATOR_CONTENT`](/web/developers/naisilib/const#naisi-validator-content) = `7` — 通用多行内容验证正则。 要求内容非空，并排除控制字符以及部分高风险字符；允许正常换行。
- [`NAISI_VALIDATOR_ENGLISH_STRING`](/web/developers/naisilib/const#naisi-validator-english-string) = `8` — 英文业务字符串验证正则。 匹配以英文字母或数字开头，并由英文、数字和有限符号构成、至少两个字符的字符串。
- [`NAISI_VALIDATOR_USER`](/web/developers/naisilib/const#naisi-validator-user) = `9` — 用户名验证正则。 匹配小写字母开头、字母或数字结尾，并允许数字、连字符和下划线的用户名。
- [`NAISI_VALIDATOR_ENGLISH`](/web/developers/naisilib/const#naisi-validator-english) = `10` — 纯英文字母验证正则。 匹配只包含大写或小写英文字母的非空字符串。
- [`NAISI_VALIDATOR_CHINESE`](/web/developers/naisilib/const#naisi-validator-chinese) = `11` — 中文兼容字符验证正则。 匹配一个或多个非 ASCII Unicode 字符，包括汉字、Emoji 表情及其他中文业务文本中允许的扩展字符。
- [`NAISI_VALIDATOR_NUMBER`](/web/developers/naisilib/const#naisi-validator-number) = `12` — 纯数字验证正则。 匹配只包含十进制数字的非空字符串。
- [`NAISI_VALIDATOR_CHINESE_ENGLISH`](/web/developers/naisilib/const#naisi-validator-chinese-english) = `13` — 中文或英文组合验证正则。 字符只能是英文字母或非 ASCII Unicode 字符，可只出现其中一种类别。
- [`NAISI_VALIDATOR_ENGLISH_NUMBER`](/web/developers/naisilib/const#naisi-validator-english-number) = `14` — 英文或数字组合验证正则。 匹配英文、数字或两者组合的非空字符串。
- [`NAISI_VALIDATOR_CHINESE_ENGLISH_NUMBER`](/web/developers/naisilib/const#naisi-validator-chinese-english-number) = `15` — 中文、英文或数字组合验证正则。 字符只能是非 ASCII Unicode 字符、英文字母或 ASCII 数字，可只出现其中一种类别。
- [`NAISI_VALIDATOR_CHINESE_ENGLISH_MATCH`](/web/developers/naisilib/const#naisi-validator-chinese-english-match) = `16` — 中文与英文同时出现验证正则。 字符只能是非 ASCII Unicode 字符或英文字母，并且两类字符必须各出现至少一次。
- [`NAISI_VALIDATOR_ENGLISH_NUMBER_MATCH`](/web/developers/naisilib/const#naisi-validator-english-number-match) = `17` — 英文与数字同时出现验证正则。 字符只能是英文字母或 ASCII 数字，并且两类字符必须各出现至少一次。
- [`NAISI_VALIDATOR_CHINESE_ENGLISH_NUMBER_MATCH`](/web/developers/naisilib/const#naisi-validator-chinese-english-number-match) = `18` — 中文、英文与数字同时出现验证正则。 字符只能是非 ASCII Unicode 字符、英文字母或 ASCII 数字，并且三类字符必须各出现至少一次。
- [`NAISI_VALIDATOR_LOWERCASE_KEY_NAME`](/web/developers/naisilib/const#naisi-validator-lowercase-key-name) = `19` — 小写键名验证正则。 匹配小写字母开头、字母或数字结尾，且至少两个字符的字母、数字和下划线键名。
- [`NAISI_VALIDATOR_UPPERCASE_KEY_NAME`](/web/developers/naisilib/const#naisi-validator-uppercase-key-name) = `20` — 大写键名验证正则。 匹配大写字母开头、字母或数字结尾，且至少两个字符的字母、数字和下划线键名。
- [`NAISI_VALIDATOR_IMAGE_SIZE`](/web/developers/naisilib/const#naisi-validator-image-size) = `21` — 图片尺寸文本验证正则。 匹配使用星号连接的宽高值，每一边必须在 10 至 9000 之间。
- [`NAISI_VALIDATOR_MODEL_SPEC_PATTERN`](/web/developers/naisilib/const#naisi-validator-model-spec-pattern) = `22` — 型号规格验证正则。 匹配字母或数字开头和结尾，并允许星号、点、加减号、斜杠及井号的规格文本。
- [`NAISI_VALIDATOR_DOMAIN`](/web/developers/naisilib/const#naisi-validator-domain) = `23` — 域名验证正则。 匹配总长不超过253、至少包含一个点的规范小写域名；标签不得包含下划线、连续点或首尾连字符。
- [`NAISI_VALIDATOR_LOWERCASE`](/web/developers/naisilib/const#naisi-validator-lowercase) = `24` — 纯小写字母验证正则。 匹配只包含小写英文字母的非空字符串。
- [`NAISI_VALIDATOR_CREDIT_CODE_FORMAT`](/web/developers/naisilib/const#naisi-validator-credit-code-format) = `25` — 18 位统一社会信用代码字符格式，ASCII 大小写均可；不验证校验位。
- [`NAISI_VALIDATOR_COLOR_HEX`](/web/developers/naisilib/const#naisi-validator-color-hex) = `26` — 仅 #RGB、#RRGGBB、#RRGGBBAA 颜色格式。
- [`NAISI_VALIDATOR_OPENID`](/web/developers/naisilib/const#naisi-validator-openid) = `27` — 26～30 位 ASCII 字母、数字、下划线或短横线，仅验证格式。
- [`NAISI_VALIDATOR_LANDLINE_NUMBER`](/web/developers/naisilib/const#naisi-validator-landline-number) = `28` — 0 开头的 3～4 位区号、短横线及 5～8 位号码。
- [`NAISI_VALIDATOR_ASCII_IDENTIFIER`](/web/developers/naisilib/const#naisi-validator-ascii-identifier) = `29` — 非空 ASCII 字母、数字、下划线或短横线，允许数字开头。

## 调用示例

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

```php
// 前提：本请求已成功执行 naisi_is_ext_license_valid($customerId)。
var_dump(naisi_string_is_valid('English1', NAISI_VALIDATOR_ENGLISH_NUMBER_MATCH, 3, 20));
var_dump(naisi_string_is_valid('abc', NAISI_VALIDATOR_ENGLISH, 3, 3));
var_dump(naisi_string_is_valid('abc', NAISI_VALIDATOR_ENGLISH, 4));
var_dump(naisi_string_is_valid('abc', NAISI_VALIDATOR_ENGLISH, 0, 2));
var_dump(naisi_string_is_valid('中文😀', NAISI_VALIDATOR_CHINESE, 3, 3));
var_dump(naisi_string_is_valid('', NAISI_VALIDATOR_STRING));
var_dump(naisi_string_is_valid('abc', NAISI_VALIDATOR_ENGLISH, 4, 2));
var_dump(naisi_string_is_valid('abc', NAISI_VALIDATOR_ENGLISH, -1, -1));
```

## 长度与类型边界

长度按 Unicode 码点计算，与有效 UTF-8 输入的 `mb_strlen($string, 'UTF-8')` 一致，不按字节或用户可见字形计数。例如 `中文😀` 长度为 3，组合 Emoji 可能包含多个码点。

- 上下限均包含边界；`0` 关闭对应限制，负数始终返回 `false`。
- 两个边界均启用且最小值大于最大值时返回 `false`，不交换边界、不截断字符串。
- 原始 PHP 参数类型必须匹配声明；数字字符串验证器编号、浮点长度等返回 `false`，不进行弱类型转换。
- 不启用长度限制时，与 `naisi_value_is_valid()` 对相同输入和验证器的结果一致。
- `naisi_string_length_is_valid()` 的第二个参数只限制最大长度，且上限小于 1 或空字符串始终返回 `false`；本函数的 `0` 表示关闭限制，不能直接用两者的 `&&` 代替全部语义。

## 版本信息

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