2013-09-12 4 views
0

У меня есть следующий строковый символ, состоящий из двух букв, сопровождаемых четырьмя числами, за которыми следуют две буквы, такие как xy1234xy. Мне нужно определить, соответствует ли пользовательская запись этим критериям.Проверка формата для чисел и букв в определенном положении строки

Для других проектов, я использовал Take, Skip как я предпочел бы не использовать Regix если есть альтернатива:

Я использовал нечто подобное в прошлом, но имеющие проблемы с середины раздела:

public static void MemberNumberInput(string checkNumberLetter) 
{ 
IsValidInput = (checkNumberLetter.Take(2).All(char.IsLetter) & 
(checkNumberLetter.Skip(2).All(char.IsDigit) & 
(checkNumberLetter.Take(2).All(char.IsLetter) & 
(checkNumberLetter.Trim().Length == 8)))); 
} 
} 

Спасибо всем:

Guy

+0

Regex? Или явным образом проверяю каждую позицию в строке? –

+0

Hey Karel: Позиция должна совпадать, а также тип символа: поэтому она должна начинаться с 2 букв 4 цифры и 2 буквы в вышеуказанном формате. – Asynchronous

+4

«Я не собираюсь показывать вам какое-либо усилие, которое я сделал, но, пожалуйста, не включайте легкое и правильное решение, поскольку я бы предпочел не использовать его». на самом деле не лучший способ попросить о помощи здесь. –

ответ

6

Как насчет как это?

string myString = "xy1234xy"; 
if(Regex.IsMatch(myString, "^[A-Za-z]{2}[0-9]{4}[A-Za-z]{2}$")) 
{ 
    // Do something 
} 

^[A-Za-z]{2}[0-9]{4}[A-Za-z]{2}$ 

Regular expression visualization

Edit live on Debuggex

Здесь DEMO.

+0

Спасибо за ответ. Я обычно (лично) пытаюсь найти другие альтернативы Regix. Вы, например, очень интересны, освежающие и очень полезные. Спасибо, что нашли время. – Asynchronous

+0

@UnaverageGuy Изучите регулярные выражения. Самое замечательное в том, что они (в основном) то же самое на всех языках, которые используются в командных линиях, IDE, некоторых веб-сайтах и ​​т. Д. И это помогает вам нанять на google. https://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions –

-1

Regex отлично подходит для использования в этом случае. Но вы также можете добиться этого и на C#.

priavte bool Check(string s) 
//suppose s = "xy2324xy", and only if you have this format fix 
s= s.substring(2,5); 
if(s.Length ==8 && not int.tryparse(s, out num)) // I am writing not , as my exclamation key doesn't works 
{ 
    return false; 
} 
} 

Использование:

if(Check(your_value)) 
{ 
    // do some thing 
} 
+1

Это только проверьте, являются ли символы 3,4,5 и 6 номерами. Regex, предложенный Soner, является лучшим способом для продолжения ИМО. – Baral

1

Если вы абсолютно не можете использовать регулярное выражение, я думаю, что самый простой способ, чтобы просто проверить их один за одним:

return checkNumberLetter.Length == 8 && 
    checkNumberLetter[0].IsLetter() && 
    checkNumberLetter[1].IsLetter() && 
    checkNumberLetter[2].IsDigit() && 
    checkNumberLetter[3].IsDigit() && 
    checkNumberLetter[4].IsDigit() && 
    checkNumberLetter[5].IsDigit() && 
    checkNumberLetter[6].IsLetter() && 
    checkNumberLetter[7].IsLetter(); 

Вы можете сделать это в цикле for или некотором наборе запросов LINQ, но, на мой взгляд, это самый простой и самый простой вариант.

Смежные вопросы