मैं रेगेक्स का उपयोग कर सी # में एक विंडोज़ पथ को प्रमाणित करने की कोशिश कर रहा हूं। इस जवाब के आधार पर मैं एक रेगेक्स लेकर आया हूं जो अनुमति देता है ड्राइव अक्षर और बिना पथ लेकिन यह रिक्त स्थान पर घुटता हुआ प्रतीत होता है।

कार्यक्रम:

public bool ValidatePath(string path)
    {
        Regex regex = new Regex(@"^(([a-zA-Z]:\\)|\\\\)(((?![<>:""/\\|? *]).)+((?<![ .])\\)?)*$");
        return regex.IsMatch(path);
    }

जो मेरे सभी परीक्षण मामलों के लिए काम करता है सिवाय उस मामले को छोड़कर जहां फ़ाइल नाम में रिक्त स्थान हैं:

    [Test]
    [TestCase(@"c:\", true)]
    [TestCase(@"\\server\filename", true)]
    [TestCase(@"\\server\filename with space", true)] //fails
    [TestCase(@"\\server\filename\{token}\file", true)] 
    [TestCase(@"zzzzz", false)]
    public void BadPathTest(string path, bool expected) 
    {
        ValidatePath(path).Should().Be(expected);
    }

मैं इसे फ़ाइल नामों में रिक्त स्थान की अनुमति देने के लिए कैसे प्राप्त करूं, मैं अपने जीवन के लिए यह नहीं देख सकता कि इसे कहां जोड़ना है?

4
Lobsterpants 12 जुलाई 2018, 15:16
1
इसलिए, यदि आप उन्हें अनुमति देते हैं, तो पैटर्न में रिक्त स्थान हटाएं
 – 
Wiktor Stribiżew
12 जुलाई 2018, 15:21
थैंक्यू @WiktorStribiżew _ ने अभी-अभी गलत जगह को देखते हुए उम्र बिताई थी!
 – 
Lobsterpants
12 जुलाई 2018, 15:27
रेगेक्स एक गड़बड़ है, इसका इस्तेमाल न करें।
 – 
Wiktor Stribiżew
12 जुलाई 2018, 15:36
संभवतः, इसे ^(?:[a-zA-Z]:\\|\\\\)(?>[^\r\n<>:"/\\|?*]+(?:(?<![\s.])\\)?)+$. फिर भी, इसके लिए सही टूल का इस्तेमाल करें।
 – 
Wiktor Stribiżew
12 जुलाई 2018, 15:45

2 जवाब

आप इसे पहले से ही .NET फ्रेमवर्क में उरी बनाकर और उरी.IsUnc प्रॉपर्टी

Uri uncPath =  new Uri(@"\\my\unc\path");
Console.WriteLine(uncPath.IsUnc);

इसके अलावा आप देख सकते हैं कि इसे संदर्भ स्रोत में कैसे लागू किया जाता है।

5
Owen Pauling 12 जुलाई 2018, 15:31
1
वास्तव में मैं क्या करना चाहता हूं धन्यवाद, लेकिन दूसरों के लिए उपयोगी उत्तर।
 – 
Lobsterpants
12 जुलाई 2018, 15:29

विंडोज़ कुछ वर्णों को अस्वीकार करता है:

enter image description here

यहां निर्दिष्ट: Microsoft डॉक्स: नामकरण फ़ाइलें, पथ, और नाम स्थान

तो यहाँ UNC के लिए एक बहिष्करण आधार नियमित अभिव्यक्ति है

(\\\\([a-z|A-Z|0-9|-|_|\s]{2,15}){1}(\.[a-z|A-Z|0-9|-|_|\s]{1,64}){0,3}){1}(\\[^\\|\/|\:|\*|\?|"|\<|\>|\|]{1,64}){1,}(\\){0,}
1
Daniel Fisher lennybacon 22 मई 2019, 17:24