Main Content

matlab.lang.makeValidName

根据输入字符串构造有效的 MATLAB 标识符

说明

示例

N = matlab.lang.makeValidName(S) 根据输入字符串 S 构造有效的 MATLAB® 标识符 NmakeValidName 函数并不保证 N 中的字符串是唯一的。

有效的 MATLAB 标识符是由字母数字(A–Z、a–z、0–9)和下划线构成的字符向量,第一个字符应为字母且字符向量长度须小于或等于 namelengthmax

makeValidName 在替换任何非字母数字或下划线字符之前会先删除所有空白字符。如果空白字符后为小写字母,则 makeValidName 会将该字母转换为相应的大写字符。

示例

N = matlab.lang.makeValidName(S,Name,Value) 包括由一个或多个 Name,Value 对组参数指定的其他选项。

示例

[N, modified] = matlab.lang.makeValidName(___) 返回一个逻辑数组 modified,指示哪些元素已修改。您可将此语法与上述语法中的任何输入参数一起使用。

示例

全部折叠

S = {'Item_#','Price/Unit','1st order','Contact'};
N = matlab.lang.makeValidName(S)
N = 1x4 cell
    {'Item__'}    {'Price_Unit'}    {'x1stOrder'}    {'Contact'}

在第一个和第二个元素中,makeValidName 将无效字符(#/)替换为下划线。在第三个元素中,makeValidName 添加了一个前缀(因为该字符向量不是以字母开头)、删除了空格,并将删除的空格后面的字符更改为大写。

将无效字符替换为相应的十六进制表示形式。

S = {'Item_#','Price/Unit','1st order','Contact'};
N = matlab.lang.makeValidName(S,'ReplacementStyle','hex')
N = 1x4 cell
    {'Item_0x23'}    {'Price0x2FUnit'}    {'x1stOrder'}    {'Contact'}

在第一个和第二个元素中,makeValidName 将无效字符(#/)替换为其十六进制表示形式。在第三个元素中,makeValidName 添加了一个前缀(因为该字符向量不是以字母开头)、删除了空格,并将删除的空格后面的字符更改为大写。

删除无效字符。

N = matlab.lang.makeValidName(S,'ReplacementStyle','delete')
N = 1x4 cell
    {'Item_'}    {'PriceUnit'}    {'x1stOrder'}    {'Contact'}

makeValidName 删除了无效字符(#/)。在第三个元素中,makeValidName 添加了一个前缀(因为该字符向量不是以字母开头)、删除了空格,并将删除的空格后面的字符更改为大写。

S = {'1stMeasurement','2ndMeasurement','Control'};
N = matlab.lang.makeValidName(S,'Prefix','m_')
N = 1x3 cell
    {'m_1stMeasurement'}    {'m_2ndMeasurement'}    {'Control'}

只有那些未以字母开头的元素前面添加了前缀。

S = {'a%name', 'name_1', '2_name'};
[N, modified] = matlab.lang.makeValidName(S)
N = 1x3 cell
    {'a_name'}    {'name_1'}    {'x2_name'}

modified = 1x3 logical array

   1   0   1

makeValidName 没有修改第二个元素。

输入参数

全部折叠

输入字符串,指定为字符向量、字符向量元胞数组或字符串数组。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: 'ReplacementStyle','delete' 删除无效字符。

替换样式,指定为 'underscore''delete''hex'。该值控制 MATLAB 如何替换非字母数字字符。对于 ReplacementStyle 的所有值,MATLAB 将删除空白字符并将紧随空白的小写字母更改为大写。

ReplacementStyle描述
'underscore'(默认值)使用下划线替换非字母数字或非下划线的所有字符。'underscore'
'hex'将每个非字母数字或非下划线字符替换为对应的十六进制表示形式。'hex'
'delete'删除非字母数字或非下划线的所有字符。'delete'

makeValidName 替换非字母数字字符后,要为不是以字母开头的输入添加的前缀字符,指定为字符向量或字符串标量。例如,默认情况下,makeValidName 会为输入 '*hello' 添加前缀字符,因为在替换非字母数字字符后,该输入不是以字母开头 ('_hello')。但是,如果您指定的是将非字母数字字符删除的替换样式,则 makeValidName 不会添加前缀字符。在替换非字母数字字符后,输入将以字母开头 ('hello')。

有效前缀必须符合以下条件。

  • 以字母开头。

  • 只能包含字母数字字符和下划线。

  • 不能是 MATLAB 关键字。

  • 长度不能超过 namelengthmax 的值。

输出参数

全部折叠

有效的 MATLAB 标识符,以字符向量、字符向量元胞数组或字符串数组形式返回。输出与输入 S 具有相同的维度数。

元素修改指示符,以逻辑标量或数组形式返回,与输入 S 具有相同维度数。值 1 (true) 表示 makeValidName 已修改相应位置处的输入。值 0 (false) 表示 makeValidName 不需要修改相应位置处的输入。

提示

  • 要确保输入值有效且唯一,请先使用 matlab.lang.makeValidName,再使用 matlab.lang.makeUniqueStrings

    S = {'my.Name','my_Name','my_Name'};
    validValues = matlab.lang.makeValidName(S)
    validUniqueValues = matlab.lang.makeUniqueStrings(validValues,{},...
        namelengthmax)
    validValues = 
    
        'my_Name'    'my_Name'    'my_Name'
    
    
    validUniqueValues = 
    
        'my_Name'    'my_Name_1'    'my_Name_2'

  • 要自定义无效字符替换,请首先使用 strrepregexprep 等函数将无效字符转换为有效字符。例如,使用 strrep(S,'@','At')S 中的 '@' 字符转换为 'At'。然后再使用 matlab.lang.makeValidName 确保 S 中的所有字符都有效。

版本历史记录

在 R2014a 中推出