2012-12-19 28 views
6

Tôi không thể thực sự đi sâu vào dự án của mình vì một số lý do hạn chế.Có sự khác biệt nào giữa XSD: Pattern và C# Regex không?

Về bản chất tôi đang cố gắng xác thực trước một đối tượng trước khi tuần tự hóa đối tượng đó và sau đó xác thực đối tượng đó dựa trên lược đồ. Giản đồ có xác nhận cho một tên, mà tôi biết là không lý tưởng và tốt hơn của bạn không xác nhận một tên - nhưng tôi dường như không thể tái tạo một regex hợp lệ cho những gì lược đồ đang cố gắng làm.

<xsd:simpleType name="CharsetD"> 
    <xsd:restriction base="xsd:string"> 
    <xsd:pattern value="[A-Za-z \-&apos;]*"/> 
    </xsd:restriction> 
</xsd:simpleType> 

<xsd:element minOccurs="0" maxOccurs="2" name="Fore"> 
    <xsd:simpleType> 
    <xsd:restriction base="CharsetD"> 
     <xsd:minLength value="1"/> 
     <xsd:maxLength value="35"/> 
     <xsd:pattern value="[A-Za-z].*"/> 
    </xsd:restriction> 
    <xsd:simpleType> 
</xsd:element> 

tôi chỉ đơn giản nghĩ rằng trong trường hợp trên mà tôi có thể thử và chỉ cần sử dụng xsd:pattern cho charset.

Tôi đã cố gắng sử dụng [A-Za-z \-&apos;]* trả về tên như Luke2 là hợp lệ, nhưng xác thực lược đồ cho biết không phải vì nó chứa số.

Câu hỏi của tôi là, làm cách nào tôi có thể sao chép ở trên trong một đơn regex c#? Ngoài ra, có bất kỳ sự khác biệt nào giữa cách mẫu lược đồ hoạt động so với nếu tôi sử dụng nó trong .NET mà tôi có thể lưu ý cho tương lai không?

Trả lời

2

tôi đã tìm thấy được vấn đề, mặc dù trá hình như tôi đã không thực sự làm việc rộng rãi với XML Schema

Sự khác biệt

Loại CharsetD không chỉ cần sử dụng các mô hình, như một mình isn' này t đủ tốt để xác nhận tên với các con số, vì vậy khi tôi cố gắng chỉ sử dụng mẫu - nó cho phép số. Tuy nhiên, có một dòng trên kiểu đó có ràng buộc các số và do đó lược đồ trả về một lỗi mà regex không thực hiện.

<xsd:restriction base="xsd:string"> 

Giải pháp

Tôi tạo ra một regex đơn khác nhau mà sẽ phục vụ những hạn chế string được áp dụng trong sơ đồ của tôi.

^[\p{L} \.\-]+$ 
Các vấn đề liên quan