Поскольку регулярное выражение для английской или арабской буквы (как описано в в этом ответе , на которое вы ссылались, см. Также в этом ответе ) равно [a-zA-Za-z\u0621-\u064A]
и английской или арабской цифре регулярное выражение [0-9\u0660-\u0669]
вы можете использовать
let passwordRegex = "^(?=.*[a-zA-Z\\u0621-\\u064A])(?=.*[0-9\\u0660-\\u0669])[a-zA-Za-z\\u0621-\\u064A0-9\\u0660-\\u0669]{8,}$"
ПРИМЕЧАНИЕ: вам не нужны внешние ^
и $
якоря, потому что MATCHES
требует, чтобы шаблон совпадал со всем вводом строки.
Другой способ сопоставить арабскую букву с регулярным выражением ICU, используемым в Swift, - использовать [\p{L}&&[\p{script=Arabic}]]
(это пересечение внутри класса символов, оно соответствует любой букве, кроме арабского набора символов). То же самое с цифрой: [\p{N}&&[\p{script=Arabic}]]
. Тогда регулярное выражение будет выглядеть как
let passwordRegex = "^(?=.*[\\p{L}&&[\\p{script=Arabic}A-Za-z]])(?=.*[\\p{N}&&[\\p{script=Arabic}0-9]])[\\p{L}\\p{N}&&[\\p{script=Arabic}a-zA-Z0-9]]{8,}$"
Итак, вот
[\\p{L}&&[\\p{script=Arabic}A-Za-z]]
- любая буква, но она должна принадлежать либо буквам ASCII, либо арабскому алфавиту
[\\p{N}&&[\\p{script=Arabic}0-9]]
- любая цифра, кроме диапазона 0-9
или арабского алфавита
[\\p{L}\\p{N}&&[\\p{script=Arabic}a-zA-Z0-9]]
- любая буква или цифра, но только из ASCII 0-9
, A-Z
, a-z
и арабского алфавита.
Обратите внимание, что для сопоставления любых букв вы можете использовать \p{L}
и для сопоставления любых цифр, которые вы можете использовать \d
(они поддерживают Unicode в библиотеке ICU). Итак, * если t не имеет значения, являются ли буквы или цифры арабскими, английскими, греческими или какими-либо другими, вы можете использовать
let passwordRegex = "^(?=.*\\p{L})(?=.*\\d)[\\p{L}\\d]{8,}$"