我正在寻找在Delphi XE中创建一个正则表达式,该正则表达式将匹配一个数字,然后是一个小数点,然后是(基本上)无限个数字。
有效的例子:
2.334
150.2
0.23
3
无效的示例:
3..42
4-2.3
e5.64
3 145
小数点可以是可选的,整数也可以。
如何使用TRegEx在Delphi中做到这一点?
编辑:
到目前为止,这是我所拥有的:
enter function CheckCoefficientBoxesValidInput(InputtedTerm : TEdit) : boolean;
var
RegularExpression : TRegEx;
Match : TMatch;
begin
RegularExpression.Create('[-+]?[0-9]*\.?[0-9]+');
Match := RegularExpression.Match(InputtedTerm.Text);
if Match.Success then
begin
ShowMessage('Success.');
end;
end;
编辑2:
尝试@DavidHeffernan的代码:
Function CheckCoefficientBoxesValidInput(InputtedTerm : TEdit) : boolean;
var
RegularExpression : TRegEx;
Match : TMatch;
begin
CheckCoefficientBoxesValidInput := true;
if not RegularExpression.IsMatch(InputtedTerm.Text, '[-+]?[0-9]*\.?[0-9]+') then
CheckCoefficientBoxesValidInput := false;
end;
不幸的是,这似乎不起作用。
您可能也想提供一个符号,以允许使用负数。这应该做。
[-+]?[0-9] * \。?[0-9] +
这不会识别科学符号,但是您并没有要求。True
如果可以在输入文本内的任何位置找到该模式,则返回此值。我不知道您的完整要求,但我想您想将其与整个输入字符串进行匹配。使用^
并$
开始和锚线为结束。也许您也想允许在值周围使用空格:
^ \ s * [-+]?[0-9] * \。?[0-9] + \ s * $
测试这样的匹配项:
TRegEx.IsMatch(Input, '^\s*[-+]?[0-9]*\.?[0-9]+\s*$')
演示:
{$APPTYPE CONSOLE}
uses
System.RegularExpressions;
procedure Check(const Input: string);
begin
Writeln(Input, ' ', TRegEx.IsMatch(Input, '^\s*[-+]?[0-9]*\.?[0-9]+\s*$'));
end;
begin
Check('2.334');
Check('150.2');
Check('0.23');
Check('3');
Check('3..42');
Check('4-2.3');
Check('e5.64');
Check('3 145');
end.
输出
2.334是 150.2是 0.23是 3是 3..42假 4-2.3错误 e5.64虚假 3145假
Delphi正则表达式的参考在这里:http : //www.regular-expressions.info/
以及Delphi正则表达式类的文档:http : //docwiki.embarcadero.com/Libraries/en/System.RegularExpressions.TRegEx
打电话会容易得多TryStrToFloat
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句