xregexp, имеющий другой результат - PullRequest
3 голосов
/ 15 марта 2019

Я хочу проверить строку с правилами:

  • строка должна содержать хотя бы одну букву
  • строка может содержать только эти символы (но это не обязательно): ', -, (,)
  • если в строке присутствует символ, он также должен содержать букву (хотя бы один 1-й маркер )
  • не допускаются только символы

До сих пор я придумал следующее регулярное выражение:

    static personName = XRegExp.cache("^[\\s\\p{L}\\'\\-\\(\\)]+(?=\\S*\\p{L})\\S+$");

, которое не работает правильно.Только "^(?=\\S*\\p{L})\\S+$" это помогает с буквами, я изо всех сил пытаюсь понять, как добавить к нему символы, чтобы все правила были пройдены, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Если разрешенные вами символы ограничены теми, которые вы перечислили, вы можете использовать

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 или болеебуквы, цифры, пробелы и разрешенные символы
  • $ - конец строки.
0 голосов
/ 15 марта 2019

Попробуйте это регулярное выражение

 ^[a-zA-Z0-9\'\-\(\)]*[a-zA-Z][a-zA-Z0-9\'\-\(\)]*$

Демонстрационный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...