验证输入是否为坐标c#

时间:2018-09-11 05:52:40

标签: c# regex

我必须验证给定的输入字符串是否为有效坐标

 string s1 = "78;58|98;52";

有效坐标为“ 78; 58 | 98; 52” =>“ Width; Height | X,Y”

4 个答案:

答案 0 :(得分:1)

尝试以下模式:(\d+(?:\.\d+)?);(?1)\|(?1);(?1)

(\d+(?:\.\d+)?)匹配数字:整数或十进制数字,其中十进制字符为.(点)。

(?1)-引用上述模式以使其匹配四次。

Demo

尝试以下代码:

string[] coords = { "78;58|98;54", "78.1;58.23|98;54.12", "78;58.23|98.13;54" };

Regex regex = new Regex(@"(\d+(?:\.\d+)?;?){2}|(\d+(?:\.\d+)?;?){2}");

foreach (string coord in coords)
    if (regex.Match(coord).Success)
        MessageBox.Show($"Success with string {coord}");

它使用(\d+(?:\.\d+)?;?){2}|(\d+(?:\.\d+)?;?){2}作为模式,因为我不知道如何在C#中反向引用模式。这只是扩展的第一个模式。

答案 1 :(得分:0)

尝试

(\d+;\d+)\|(\d+;\d+)

Demo

答案 2 :(得分:0)

这是坐标验证程序的基本示例。您可以轻松更改验证逻辑。此外,还需要检查坐标构造函数的输入字符串。

class Coordinate
{
    public int Width { get; private set; }
    public int Height { get; private set; }
    public int X { get; private set; }
    public int Y { get; private set; }

    public Coordinate(string str)
    {
        // Validate str and/or p and check of the TryParse was successful
        var p = str.Split(new char[] { ';', '|' }).Select(x =>
        {
            int.TryParse(x, out int res);
            return res;
        });

        Width = p.ElementAt(0);
        Height = p.ElementAt(1);
        X = p.ElementAt(2);
        Y = p.ElementAt(3);
    }
}

static class CoordinateValidator
{
    public static bool isValidCoordinate(Coordinate coordinate)
    {
        // Here add your validation Logic
        return coordinate.Height > 0 && coordinate.Width > 0;
    }
}

static void Main(string[] args)
{
    string s = "78;58|98;52";
    Coordinate coordinate = new Coordinate(s);
    Console.WriteLine("Is valid: " + CoordinateValidator.isValidCoordinate(coordinate));
    Console.ReadLine();
}

答案 3 :(得分:0)

try {
    if (Regex.IsMatch(s1, @"^\d+;\d+\|\d+;\d+$")) {
        // Successful match
    } else {
        // Match attempt failed
    } 
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}

如果您想限制接受的位数,则只需将+替换为{1,2}或{1,3}即可接受1位(最多3位)