我必须验证给定的输入字符串是否为有效坐标
string s1 = "78;58|98;52";
有效坐标为“ 78; 58 | 98; 52” =>“ Width; Height | X,Y”
答案 0 :(得分:1)
尝试以下模式:(\d+(?:\.\d+)?);(?1)\|(?1);(?1)
。
(\d+(?:\.\d+)?)
匹配数字:整数或十进制数字,其中十进制字符为.
(点)。
(?1)
-引用上述模式以使其匹配四次。
尝试以下代码:
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)
答案 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位)