我创建文本框WPF扩展控制必须只能通过使用正则表达式允许下列输入:正则表达式只允许0-24浮点数字
- 数量必须是在0和24(0 < =数< = 24)
- 必须只允许浮点后最多两位数字,例如:0.5,0.55,23.2,23.55
这是相当困难的我找出其中的正则表达式将允许传递范围。我已经开始:
^[0-9]*(?:\.[0-9]*)?$
但它不完全符合我的要求。所以我正在寻求帮助来获得这个正则表达式。
我创建文本框WPF扩展控制必须只能通过使用正则表达式允许下列输入:正则表达式只允许0-24浮点数字
这是相当困难的我找出其中的正则表达式将允许传递范围。我已经开始:
^[0-9]*(?:\.[0-9]*)?$
但它不完全符合我的要求。所以我正在寻求帮助来获得这个正则表达式。
为什么要使用正则表达式得到一个头痛?简单地分析文本,检查值的范围和小数位数:
bool IsValid(string text) {
decimal candidate;
if(decimal.TryParse(text, out candidate)){
if(
candidate >= 0 && // Check lower bound
candidate <= 24 && // CHeck higher bound
Math.Round(candidate, 2) == candidate // Check number of decimals
) {
return true;
}
}
return false;
}
此外,你将通过让系统处理这避免全球化问题(使用.
,,
取决于文化)。
可能是因为所有现有的验证都是由正则表达式完成的,并且不希望引入新的验证模式? (但我同意你的观点) – paul
我相信正则表达式是很好的工具,明智地使用。我不认为将世界重新组合是一个好主意,因为它很难阅读,难以维护,甚至有时会导致安全问题(谷歌为邪恶的正则表达式)。但是确实,使用正则表达式可以保持与应用程序中的其他验证保持一致,这取决于上下文。 –
@paul - 即使所有其他紧固件都是钉子,也不应该在项目中的一颗螺丝上使用锤子。 –
尝试这种模式:
^24(?:\\.00?)?|(?:2[0-3]|1?[0-9])(?:\\.[0-9]{1,2})?$
你尝试过什么正则表达式? – user7116
好的,我试过这个^ [0-9] *(?:\。[0-9] *)?$ – Arterius