如何用正则表达式判断角度字符的正确
如有格式化的角度字符“145-56-25”,如何用正则表达式判断角度字符的正确。要求度大于等于0,小于360;分秒小于60即可。如果正确返回TRUE,否则返回FALSE。
本帖最后由 雪山飞狐_lzh 于 2012-7-20 19:02 编辑
直接正则有点复杂。。。好久没用快忘了
var s = "135-15-15";
var pat = "^(\\d{1,2}|\\d{1,2}|3\\d)-(\\d{1}|\\d)-(\\d{1}|\\d)$";
var m = Regex.Match(s, pat);
if(m.Success)
{
int d = int.Parse(m.Groups.Value);
int f = int.Parse(m.Groups.Value);
int ss = int.Parse(m.Groups.Value);
}
出错啦,不知是什么原因,正则表达式一点也不懂!
************** 异常文本 **************
System.ArgumentException: 正在分析“^(//d%7B1,2%7D%7C3//d)-(//d%7B1%7D%7C//d)-(//d%7B1%7D%7C//d)$]\d{1,2}|\d{1,2}|3\d)-(\d{1}|\d)-(\d{1}|\d)$”- ) 过多。
在 System.Text.RegularExpressions.RegexParser.ScanRegex()
在 System.Text.RegularExpressions.RegexParser.Parse(String re, RegexOptions op)
在 System.Text.RegularExpressions.Regex..ctor(String pattern, RegexOptions options, Boolean useCache)
在 System.Text.RegularExpressions.Regex.Match(String input, String pattern)
在 Measure_computation.Form1.DigitalFormatRight(String strNumber) 位置 d:\my documents\visual studio 2010\Projects\Measure computation\Measure computation\Form1.cs:行号 107
"^(\\d{1,2}|\\d{1,2}|3\\d)-(\\d{1}|\\d)-(\\d{1}|\\d)$";
论坛的解析有点问题。。。 如果解析这样的格式"012-01-01"用
"^(\\d{1,2}|3\\d)-(\\d)-(\\d)$";
就是数据超出限制时还是报错,如输入369-25-55时
************** 异常文本 **************
System.FormatException: 输入字符串的格式不正确。
在 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
在 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
在 System.Int32.Parse(String s)
在 Measure_computation.Form1.DigitalFormatRight(String strNumber) 位置 d:\my documents\visual studio 2010\Projects\Measure computation\Measure computation\Form1.cs:行号 108
在 Measure_computation.Form1.maskedTextBox1_KeyUp(Object sender, KeyEventArgs e) 位置 d:\my documents\visual studio 2010\Projects\Measure computation\Measure computation\Form1.cs:行号 30
在 System.Windows.Forms.Control.OnKeyUp(KeyEventArgs e)
在 System.Windows.Forms.MaskedTextBox.OnKeyUp(KeyEventArgs e)
在 System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
在 System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
在 System.Windows.Forms.MaskedTextBox.ProcessKeyMessage(Message& m)
在 System.Windows.Forms.Control.WmKeyChar(Message& m)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.TextBoxBase.WndProc(Message& m)
在 System.Windows.Forms.MaskedTextBox.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
我的格式统一用000-00-00
本帖最后由 雪山飞狐_lzh 于 2012-7-20 19:13 编辑
数据超出限制时m.Success返回false 这个是你要求的额:
要求度大于等于0,小于360;分秒小于60即可。如果正确返回TRUE,否则返回FALSE
还有。。。上面的pat有小改动
非常感谢!
页:
[1]