我有一个GUIDE GUI,我要求用户输入他们的名字。如果输入数字字符,字符串和数字字符的混合或空白框,它应该执行错误对话框。
问题在于,当我输入数字或字符串和数字字符的混合时,它输出Error Code II
(第一个elseif
语句)而不是Error Code III
(输入数字)仅)或Error Code IV
(输入数字和字符串)。非常感谢投入。
这基本上就是我所拥有的:
if isempty(editString)
errordlg('Please enter a name into the text-box. We thank you in anticipation.',...
'Error Code I');
return
elseif char(editString) > 12
errordlg('Please enter a name that is less than 12 characters long. Thank you.',...
'Error Code II');
return
elseif isa(editString, 'integer')
errordlg('Please enter a name, not numbers. Thank you.', 'Error Code III');
return
elseif isa(editString, 'integer') && isa(editString, 'char')
errordlg('Please enter a name without mixing numbers & characters. Thanks.',...
'Error Code IV');
else
delete(gcf)
gui_02
end
答案 0 :(得分:2)
好吧,isa()
函数在这种情况下不起作用,因为您从Edit Text
读取的所有内容都是string
,换言之char
。因此,如果您甚至编写isa('123', 'integer')
,函数将返回0
而不是1
。无论如何,多亏了MATLAB,有一个函数:isstrprop()
确定字符串是否属于指定类别,例如integer
,char
..
检查以下代码:
if isempty(editString)
errordlg('Please enter a name into the text-box. We thank you in anticipation.', 'Error Code I');
return
elseif length(editString) > 12
errordlg('Please enter a name that is less than 12 characters long. Thank you.', 'Error Code II');
return
elseif ~isempty(find(isstrprop(editString, 'digit'), 1)) & isempty(find(isstrprop(editString, 'alpha'), 1))
errordlg('Please enter a name, not numbers. Thank you.', 'Error Code III');
return
elseif ~isempty(find(isstrprop(editString, 'digit'), 1)) & ~isempty(find(isstrprop(editString, 'alpha'), 1))
errordlg('Please enter a name without mixing numbers & characters. Thanks.', 'Error Code IV');
return
end
看起来并不优雅但有效。