Чтобы соответствовать 8 строкам символов, которые могут содержать только цифры и необязательную запятую, вы можете использовать
^(?=.{8}$)\d+,?\d+$
См. демонстрацию regex
Для просмотра требуется, чтобы строка содержала 8 символов. ,?
сделает сопоставление запятой необязательным, а +
после \d
потребует не менее 1 цифры до и после дополнительной запятой.
Если вам нужно сопоставить строку с 8 цифрами и необязательную запятую, вы можете использовать
^(?:(?=.{9}$)\d+,\d+|\d{8})$
См. демонстрацию regex
. Собственно, строка будет содержать 9 символов в строке (если это имеет запятую) или просто 8 - если есть только цифры.
Объяснение:
^
- начало строки (?:(?=.{9}$)\d+,\d+|\d{8})
- 2 альтернативы: (?=.{9}$)\d+,\d+
- 1 + цифры, за которыми следуют 1 запятая, за которой следуют 1 + цифры, а вся строка соответствует длине 9 символов (8 цифр и 1 запятая) |
- или \d{8}
- 8 цифр $
- конец строки См. демонстрацию кода Java Java (обратите внимание, что с String#matches()
, ^
и $
якоря в начале и конце шаблона являются избыточными и могут быть опущены, поскольку шаблон привязывается по умолчанию при использовании с этим методом):
List strs = Arrays.asList("0123,,678", "0123456", // bad
"01234,567", "01234567" // good
);
for (String str : strs)
System.out.println(str.matches("(?:(?=.{9}$)\\d+,\\d+|\\d{8})"));
ПРИМЕЧАНИЕ ДЛЯ КОМАНД ДЛЯ ВЕДУЩИХ / ТРЕНИРОВОК:
You ju st необходимо заменить +
( совпадение 1 или более вхождений ) квантификаторов на *
(, совпадающих с 0 или более вхождениями ) в первой альтернативной ветви, чтобы позволить начало / конец запятые:
^(?:(?=.{9}$)\d*,\d*|\d{8})$
Вот способ видеть, где конфликты (это - пример MSDN, таким образом, необходимо будет в большой степени настроить):
try
{
db.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException e)
{
Console.WriteLine("Optimistic concurrency error.");
Console.WriteLine(e.Message);
Console.ReadLine();
foreach (ObjectChangeConflict occ in db.ChangeConflicts)
{
MetaTable metatable = db.Mapping.GetTable(occ.Object.GetType());
Customer entityInConflict = (Customer)occ.Object;
Console.WriteLine("Table name: {0}", metatable.TableName);
Console.Write("Customer ID: ");
Console.WriteLine(entityInConflict.CustomerID);
foreach (MemberChangeConflict mcc in occ.MemberConflicts)
{
object currVal = mcc.CurrentValue;
object origVal = mcc.OriginalValue;
object databaseVal = mcc.DatabaseValue;
MemberInfo mi = mcc.Member;
Console.WriteLine("Member: {0}", mi.Name);
Console.WriteLine("current value: {0}", currVal);
Console.WriteLine("original value: {0}", origVal);
Console.WriteLine("database value: {0}", databaseVal);
}
}
}
, Чтобы заставить его проигнорировать проблему и фиксацию так или иначе:
db.SubmitChanges(ConflictMode.ContinueOnConflict);
Они (то, которое Вы могли добавить в частичном классе к своему datacontext, могло бы помочь Вам понять, как это работает:
public void SubmitKeepChanges()
{
try
{
this.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException e)
{
foreach (ObjectChangeConflict occ in this.ChangeConflicts)
{
//Keep current values that have changed,
//updates other values with database values
occ.Resolve(RefreshMode.KeepChanges);
}
}
}
public void SubmitOverwrite()
{
try
{
this.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException e)
{
foreach (ObjectChangeConflict occ in this.ChangeConflicts)
{
// All database values overwrite current values with
//values from database
occ.Resolve(RefreshMode.OverwriteCurrentValues);
}
}
}
public void SubmitKeepCurrent()
{
try
{
this.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException e)
{
foreach (ObjectChangeConflict occ in this.ChangeConflicts)
{
//Swap the original values with the values retrieved from the database. No current value is modified
occ.Resolve(RefreshMode.KeepCurrentValues);
}
}
}
Я получил эту ошибку при обстоятельстве, абсолютно не связанном с тем, что описывает сообщение об ошибке.
то, Что я сделал, было загрузить объект LINQ через один DataContext, и затем попробованный к SubmitChanges () для объекта через другой DataContext - дал эту точно ту же самую ошибку.
то, Что я должен был сделать, было назвать DataContext. Таблица. Присоединение (myOldObject), и затем называет SubmitChanges (), работал как очарование.
Стоящий взгляда, особенно если Вы имеете мнение, что действительно не должно быть никакими конфликтами вообще.
Ошибка "строка, не найденная или измененная" также, будет появляться иногда, когда столбцы или типы в O/R-Designer не будут соответствовать столбцам в базе данных SQL, особенно если один столбец является NULLable в SQL, но не nullable в O/R-Designer.
Так проверяют, соответствует ли Ваша таблица, отображающаяся в O/R-Designer, Вашей базе данных SQL!
"и также есть ли способ заставить LINQ игнорировать проблему и просто фиксировать данные независимо?"
можно установить свойство 'Update Check' на объекте к 'Никогда' не остановить то поле, используемое для проверки оптимистичного параллелизма.
можно также использовать:
db.SubmitChanges(ConflictMode.ContinueOnConflict)