-
Notifications
You must be signed in to change notification settings - Fork 0
RFC 23667
Данная спецификация описывает основные понятия в разработке приложений отраслевого рынка автозапчастей.
Стандартизированный артикул(номер) (numberStandart, shortArticle)
Производитель автозапчастей предлагает свою нумерацию деталей. В номерах часто можно встретить спец. символы(-,. и т.д.). Для оптимизации работы с деталями в базах данных спецсимволы убирают. Большинство продавцов поднимают номер в верхний или опускают в нижний регистр.
Храненить артикулы в БД необходимо только после стандартизации номера.
Реализации метода на разных языках: Данный метод является сильно нагруженным и крайне не рекомендуется использовать регулярные выражения.
Методы можно использовать для стандартизации брендов производителей.
-
PHP
function clearString($string){ return str_replace(['!','#', '$', '%', '&', "'", '*', '+', '-', '=', '?', '^','_','`', '{', '|', '}', '~', '@', '.', '[', ']'], '', filter_var($string, FILTER_SANITIZE_EMAIL)); } -
JAVA
В примере реализована замена латинских символов, которые присутствуют в немецком алфавите: DE "ä" -> a, DE "ö" -> o, DE "ü" -> u и RU "ё" -> RU е
public static String getNumberStandart(String a) { if (a == null) return ""; char[] charList = a.toCharArray(); StringBuilder sb = new StringBuilder(); char charItem; for (int i = 0; i < charList.length; i++) { charItem = charList[i]; if (charItem >= '\u0030' && charItem <= '\u0039') { //numbers sb.append(charItem); }else if (charItem >= '\u0061' && charItem <= '\u007A'){ //abc lower sb.append(charItem); }else if (charItem >= '\u0041' && charItem <= '\u005A'){ //ABC upper sb.append(Character.toLowerCase(charItem)); }else if (charItem >= '\u0430' && charItem <= '\u044F'){//rus lower () sb.append(charItem); }else if (charItem >= '\u0410' && charItem <= '\u042F') { //rus upper () sb.append(Character.toLowerCase(charItem)); }else{ switch (charItem){ case '\u00C4': //DE -> EN a sb.append('\u0061'); break; case '\u00E4': //DE -> EN a sb.append('\u0061'); break; case '\u00D6': //DE -> EN o sb.append('\u006F'); break; case '\u00F6': //DE -> EN o sb.append('\u006F'); break; case '\u00DC': //DE -> EN u sb.append('\u0075'); break; case '\u00FC': //DE -> EN u sb.append('\u0075'); break; case '\u0451': //RU -> RU e sb.append('\u0435'); break; case '\u0401': //RU -> RU e sb.append('\u0435'); break; } } } return sb.toString(); } -
Go
В примере реализована замена латинских символов, которые присутствуют в немецком алфавите: DE "ä" -> a, DE "ö" -> o, DE "ü" -> u и RU "ё" -> RU е
func GetProductNs(n string) string { var buffer bytes.Buffer for _, charCode := range strings.ToLower(n) { if charCode >= 48 && charCode <= 57 { //цифры с 48 по 57 buffer.WriteString(string(charCode)) }else if charCode >= 97 && charCode <= 122 { //английские с 97 по 122 buffer.WriteString(string(charCode)) }else if charCode >= 1072 && charCode <= 1103 { //русские с 1072 по 1103 buffer.WriteString(string(charCode)) }else { switch charCode { case 228: //DE "ä" -> EN a buffer.WriteString(string(97)) break case 246: //DE "ö" -> EN o buffer.WriteString(string(111)) break case 252: //DE "ü" -> EN u buffer.WriteString(string(117)) break case 1105: //RU "ё" -> RU е buffer.WriteString(string(1077)) break } } } return buffer.String(); } -
1C
В примере реализована замена латинских символов, которые присутствуют в немецком алфавите: DE "ä" -> a, DE "ö" -> o, DE "ü" -> u и RU "ё" -> RU е
Function NumberStandartGet(Number) СurrentNumber = Lower(Number); StrLen = StrLen(СurrentNumber); ns = ""; For Stat = 1 To StrLen Do Symbol = Mid(СurrentNumber, Stat, 1); CharCode = CharCode(Symbol); If CharCode >= 48 And CharCode <= 57 Then //цифры с 48 по 57 ns = ns + Symbol; ElsIf CharCode >= 97 And CharCode <= 122 Then //английские с 97 по 122 ns = ns + Symbol; ElsIf CharCode >= 1072 And CharCode <= 1103 Then //русские с 1072 по 1103 ns = ns + Symbol; Else If CharCode = 228 Then //DE "ä" -> EN a ns = ns + "a"; ElsIf CharCode = 246 Then //DE "ö" -> EN o ns = ns + "o"; ElsIf CharCode = 252 Then //DE "ü" -> EN u ns = ns + "u"; ElsIf CharCode = 1105 Then //RU "ё" -> RU е ns = ns + "е"; EndIf; EndIf; EndDo; Return ns; EndFunction