xgr 发表于 2012-7-20 17:05:23

如何用正则表达式判断角度字符的正确

如有格式化的角度字符“145-56-25”,如何用正则表达式判断角度字符的正确。
要求度大于等于0,小于360;分秒小于60即可。如果正确返回TRUE,否则返回FALSE。

雪山飞狐_lzh 发表于 2012-7-20 17:05:24

本帖最后由 雪山飞狐_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);
            }

xgr 发表于 2012-7-20 18:38:35

出错啦,不知是什么原因,正则表达式一点也不懂!

************** 异常文本 **************
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

雪山飞狐_lzh 发表于 2012-7-20 19:05:15

"^(\\d{1,2}|\\d{1,2}|3\\d)-(\\d{1}|\\d)-(\\d{1}|\\d)$";
论坛的解析有点问题。。。

雪山飞狐_lzh 发表于 2012-7-20 19:08:15

如果解析这样的格式"012-01-01"用
"^(\\d{1,2}|3\\d)-(\\d)-(\\d)$";

xgr 发表于 2012-7-20 19:09:13

就是数据超出限制时还是报错,如输入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)

xgr 发表于 2012-7-20 19:11:07

我的格式统一用000-00-00

雪山飞狐_lzh 发表于 2012-7-20 19:12:13

本帖最后由 雪山飞狐_lzh 于 2012-7-20 19:13 编辑

数据超出限制时m.Success返回false 这个是你要求的额:

要求度大于等于0,小于360;分秒小于60即可。如果正确返回TRUE,否则返回FALSE

还有。。。上面的pat有小改动

xgr 发表于 2012-7-20 19:22:49

非常感谢!
页: [1]
查看完整版本: 如何用正则表达式判断角度字符的正确