#regex #typescript #xregexp
#регулярное выражение #typescript #xregexp
Вопрос:
Я хочу проверить строку с помощью правил:
- строка должна содержать хотя бы одну букву
- строка может содержать только эти символы (но это не обязательно): ‘ , — , ( , )
- если в строке присутствует символ, он также должен содержать букву (по крайней мере, один 1-й маркер)
- не допускаются только символы
пока я придумал следующее регулярное выражение:
static personName = XRegExp.cache("^[\s\p{L}\'\-\(\)] (?=\S*\p{L})\S $");
который работает некорректно. Только "^(?=\S*\p{L})\S $"
это помогает с буквами, я изо всех сил пытаюсь понять, как добавить к нему символы, чтобы все правила были переданы, что я делаю не так?
Ответ №1:
Если разрешенные вами символы ограничены перечисленными вами, вы можете использовать
var regex = XRegExp("^[\s'()-]*\p{L}[\s\p{L}'()-]*$");
Если вы хотите разрешить любые символы, но только подмножество символов, с ограничением «не менее 1 буквы», используйте
var regex = XRegExp("^[\p{N}\s'()-]*\p{L}[\p{L}\p{N}\s'()-]*$");
Смотрите демонстрацию JS:
var regex = XRegExp("^[\s'()-]*\p{L}[\s\p{L}'()-]*$");
console.log( regex.test("Sóme (unknown-string) doesn't like it") );
var regex = XRegExp("^[\p{N}\s'()-]*\p{L}[\p{L}\p{N}\s'()-]*$");
console.log( regex.test("Sóme unknown-string (123)") );
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.2.0/xregexp-all.min.js"></script>
Подробные сведения
^
— начало строки[\s'()-]*
— 0 или более пробелов,'
,(
)
или-
символов[\p{N}\s'()-]*
— 0 или более цифр, пробелов и разрешенных символов\p{L}
— письмо[\s\p{L}'()-]*
— 0 или более пробелов, букв,'
,(
)
или-
символов[\p{L}\p{N}\s'()-]*
— 0 или более букв, цифр, пробелов и разрешенных символов$
— конец строки.
Ответ №2:
Комментарии:
1. Почему вы решили запретить нули?
2. Я забыл включить 0s 🙂