Main Content

matlab.lang.makeValidName

入力文字列からの有効な MATLAB 識別子の作成

説明

N = matlab.lang.makeValidName(S) は、入力 string S から、有効な MATLAB® 識別子 N を作成します。関数 makeValidName は、N の文字列が一意であることを保証しません。

有効な MATLAB 識別子は、英数字 (A–Z、a–z、0–9) とアンダースコアで構成される文字ベクトルであり、最初の文字は英字で、文字ベクトルの長さは namelengthmax 以下です。

makeValidName は、まず空白文字を削除してから、英数字またはアンダースコアでない文字を置換します。空白文字の後に小文字が来る場合、makeValidName は、その文字を対応する大文字に変換します。

N = matlab.lang.makeValidName(S,Name,Value) には、1 つ以上の Name,Value ペア引数によって指定された追加オプションが含まれます。

[N, modified] = matlab.lang.makeValidName(___) は、logical 配列 modified を返して、変更された要素を示します。この構文では、前述の構文の入力引数のいずれかを使用できます。

すべて折りたたむ

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

最初の要素と 2 番目の要素で、makeValidName は、無効な文字 (#/) をアンダースコアに置換しました。3 番目の要素は、文字ベクトルが英字で始まらないので、makeValidName は、それに接頭辞を付加し、空白を削除し、削除された空白の後にある文字を大文字に変換しました。

無効な文字を、それに対応する 16 進数表現に置換します。

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

最初の要素と 2 番目の要素で、makeValidName は、無効な文字 (#/) を、16 進数表現に置換しました。3 番目の要素は、文字ベクトルが英字で始まらないので、makeValidName は、それに接頭辞を付加し、空白を削除し、削除された空白の後にある文字を大文字に変換しました。

無効な文字を削除します。

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

makeValidName は、無効な文字 (#/) を削除しました。3 番目の要素は、文字ベクトルが英字で始まらないので、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 は 2 番目の要素を変更しませんでした。

入力引数

すべて折りたたむ

入力 string。文字ベクトル、文字ベクトルの cell 配列または string 配列として指定します。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: 'ReplacementStyle','delete' は無効な文字を削除します。

置換スタイル。'underscore''delete' または 'hex' として指定します。この値は、MATLAB が英数字以外の文字をどう置換するかを制御します。MATLAB は ReplacementStyle のすべての値について、空白文字を削除し、空白文字に続く小文字を大文字に変換します。

ReplacementStyle説明
'underscore' (既定)英数字でもアンダースコアでもない文字をすべてアンダースコアに置き換えます。'underscore'
'hex'英数字でもアンダースコアでもない文字をすべて対応する 16 進数表記に置き換えます。'hex'
'delete'英数字でもアンダースコアでもない文字をすべて削除します。'delete'

makeValidName が英数字以外の文字を置換した後に、英字で始まらない入力に接頭辞として付ける文字。文字ベクトルまたは string スカラーとして指定します。たとえば、既定で makeValidName は入力 '*hello' に接頭辞として文字を付けます。これは、英数字以外の文字を置換した後の入力が英字で始まらないためです ('_hello')。ただし、英数字以外の文字を削除する置換スタイルを指定した場合は、makeValidName は接頭辞として文字を付けません。英数字以外の文字を置換した後の入力は、英字で始まります ('hello')。

有効な接頭辞は次の条件を満たさなければなりません。

  • 英字で始まる。

  • 英数字とアンダースコアのみを含む。

  • MATLAB キーワードではない。

  • 長さが namelengthmax の値以下である。

出力引数

すべて折りたたむ

有効な MATLAB 識別子。文字ベクトル、文字ベクトルの cell 配列または string 配列として返されます。出力の次元数は、入力 S と同じです。

変更された要素のインジケーター。入力 S と同じ次元数をもつ logical スカラーまたは logical 配列として返されます。値が 1 (true) の場合、makeValidName が、対応する位置にある入力を変更したことを示しています。値が 0 (false) の場合、makeValidName は対応する位置にある入力を変更する必要がなかったことを示しています。

ヒント

  • 入力値が必ず有効かつ一意になるようにするため、matlab.lang.makeUniqueStringsmatlab.lang.makeValidName より後に使用します。

    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 で導入